⑯Pythonモジュール

スポンサーリンク

本当にわからないとこがあった場合一人では解決できません。
『teratail』とはエンジニア特化型のQ&Aサイトです。 すべてのエンジニアさんが抱えている悩みを共有して 解決するための質問サイトです
無料なのでまずは登録して使ってみてください。メールアドレスだけで登録可能です ----------------------------------------------------------------------------------------

Pythonモジュール

モジュールを使用すると、Pythonコードを論理的に整理できます。関連コードをモジュールをグループ化すると、コードを理解して使用するのが簡単になります。モジュールは、バインドして参照できる任意の名前の属性を持つPythonオブジェクトです。

単純に、モジュールはPythonコードで構成されたファイルです。モジュールは、関数、クラス、および変数を定義できます。モジュールには実行可能コードも含まれます。

anameという名前のモジュール用のPythonコードは通常、aname.pyという名前のファイルにあります。単純なモジュールの例を次に示します。support.py

def print_func( par ):
   print "Hello : ", par
   return

インポートステートメント

他のPythonソースファイルでimport文を実行することで、任意のPythonソースファイルをモジュールとして使用できます。インポートは、構文は次のとおりです。

import module1[, module2[,... moduleN]

インタプリタがインポート文を検出すると、モジュールが検索パスに存在する場合、モジュールはインポートされます。検索パスは、インタープリタがモジュールをインポートする前に検索するディレクトリのリストです。たとえば、モジュールsupport.pyをインポートするには、スクリプトの先頭に次のコマンドを挿入する必要があります。

#!/usr/bin/python

# Import module support
import support

# Now you can call defined function that module as follows
support.print_func("Zara")

上記のコードを実行すると、次の結果が生成されます。

Hello : Zara

モジュールは、インポートされた回数にかかわらず、一度だけロードされます。これにより、複数のインポートが発生した場合でも、モジュールの実行が何度も繰り返されることはありません。

…輸入声明

Pythonのfromステートメントを使用すると、特定の属性をモジュールから現在の名前空間にインポートできます。…インポートは、次の構文を持っています-

from modname import name1[, name2[, ... nameN]]

たとえば、関数fibonacciをモジュールfibからインポートするには、次のステートメントを使用します。

from fib import fibonacci

このステートメントは、モジュール全体を現在のネームスペースにインポートしません。モジュールfibからのフィボナッチアイテムを、インポートするモジュールのグローバルシンボルテーブルに導入するだけです。

…インポート*の声明:

次のimport文を使って、モジュールからすべての名前を現在の名前空間にインポートすることもできます。

from modname import *

これにより、モジュールのすべての項目を現在の名前空間に簡単にインポートできます。ただし、この記述は控えめに使用する必要があります。

モジュールの配置

モジュールをインポートすると、Pythonインタプリタは以下のシーケンスでモジュールを検索します –

  • 現在のディレクトリ。
  • モジュールが見つからない場合、Pythonはシェル変数PYTHONPATH内の各ディレクトリを検索します。
  • 他のすべてが失敗した場合、Pythonはデフォルトパスをチェックします。UNIXの場合、このデフォルトパスは通常/ usr / local / lib / python /です。

モジュール検索パスは、sys.path変数としてシステムモジュールsysに格納されます。sys.path変数には、カレントディレクトリPYTHONPATHとインストールに依存するデフォルトが含まれています。

PYTHONPATHの変数:

PYTHONPATHはディレクトリのリストからなる環境変数です。PYTHONPATHの構文は、シェル変数PATHの構文と同じです。

Windowsシステムの典型的なPYTHONPATHを次に示します。

set PYTHONPATH=c:\python20\lib;

UNIXシステムの典型的なPYTHONPATHは次のとおりです。

set PYTHONPATH=/usr/local/lib/python

名前空間とスコープ

変数は、オブジェクトにマップされる名前(識別子)です。名前空間は、変数名(キー)とそれに対応するオブジェクト(値)の辞書です。

Pythonステートメントは、ローカル名前空間グローバル名前空間の変数にアクセスできます。ローカル変数とグローバル変数の名前が同じ場合、ローカル変数はグローバル変数をシャドウします。

各関数には独自のローカル名前空間があります。クラスメソッドは、通常の関数と同じスコープ規則に従います。

Pythonは、変数がローカルかグローバルかを推測します。関数の値を代入する変数はすべてローカルであると仮定します。

したがって、関数内のグローバル変数に値を割り当てるには、まずグローバル・ステートメントを使用する必要があります。

global VarNameは、VarNameがグローバル変数であることをPythonに伝えます。Pythonは変数のローカル名前空間の検索を停止します。

たとえば、グローバル名前空間に変数Moneyを定義します。関数Money内でMoneyに値を代入するので、PythonはMoneyをローカル変数として扱います。しかし、それを設定する前にローカル変数Moneyの値にアクセスしたので、UnboundLocalErrorが結果になります。グローバルステートメントのコメントを外して問題を解決します。

#!/usr/bin/python

Money = 2000
def AddMoney():
   # Uncomment the following line to fix the code:
   # global Money
   Money = Money + 1

print Money
AddMoney()
print Money

dir()関数

dir()組み込み関数は、モジュールによって定義された名前を含む文字列のソートされたリストを返します。

リストには、モジュールに定義されているすべてのモジュール、変数、および関数の名前がリストされます。以下は簡単な例です –

#!/usr/bin/python

# Import built-in module math
import math

content = dir(math)

print content

上記のコードを実行すると、次の結果が生成されます。

['__doc__', '__file__', '__name__', 'acos', 'asin', 'atan', 
'atan2', 'ceil', 'cos', 'cosh', 'degrees', 'e', 'exp', 
'fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log',
'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 
'sqrt', 'tan', 'tanh']

ここで、特別な文字列変数__name__はモジュールの名前で、 __file__はモジュールがロードされたファイル名です。

グローバル()地元の人々 ()関数-

グローバル()地元の人々 ()関数は、それらが呼ばれている場所から場所に応じて、グローバルとローカルの名前空間内の名前を返すために使用することができます。

locals()が関数内から呼び出されると、その関数からローカルにアクセスできるすべての名前が返されます。

globals()が関数内から呼び出された場合、その関数からグローバルにアクセスできるすべての名前が返されます。

これらの関数の戻り値の型は辞書です。したがって、keys()関数を使用して名前を抽出することができます。

リロード()関数

モジュールをスクリプトにインポートすると、モジュールの最上位部分のコードが1回だけ実行されます。

したがって、モジュール内のトップレベルコードを再実行する場合は、reload()関数を使用できます。reload()関数は、以前にインポートされたモジュールを再度インポートします。reload()関数の構文は次のとおりです。

reload(module_name)

ここで、module_nameはリロードするモジュールの名前であり、モジュール名を含む文字列ではありません。たとえば、helloモジュールをリロードするには、次のようにします。

reload(hello)

Pythonのパッケージ

パッケージとは、階層的なファイルディレクトリ構造で、モジュールとサブパッケージ、サブサブパッケージなどで構成される単一のPythonアプリケーション環境を定義します。

ファイルを検討Pots.py で利用可能な携帯電話のディレクトリを。このファイルには、次のソースコード行があります。

#!/usr/bin/python

def Pots():
   print "I'm Pots Phone"

同様の方法で、上記と同じ名前の別の関数を持つ別の2つのファイルがあります。

  • 関数Isdn()を持つPhone / Isdn.pyファイル
  • 機能G3()を持つ電話/ G3.pyファイル

今度は、電話ディレクトリにもう1つのファイル__init__.pyを作成してください。

  • 電話/ __ init__.py

電話をインポートしたときにすべての関数を利用できるようにするには、次のように明示的なimport文を__init__.pyに入れる必要があります。

from Pots import Pots
from Isdn import Isdn
from G3 import G3

これらの行を__init__.pyに追加すると、Phoneパッケージをインポートするときにこれらのクラスがすべて利用可能になります。

#!/usr/bin/python

# Now import your Phone Package.
import Phone

Phone.Pots()
Phone.Isdn()
Phone.G3()

上記のコードを実行すると、次の結果が生成されます。

I'm Pots Phone
I'm 3G Phone
I'm ISDN Phone

上記の例では、各ファイルで単一の関数の例を取り上げましたが、複数の関数をファイルに保存することができます。これらのファイルで異なるPythonクラスを定義し、それらのクラスからパッケージを作成することもできます。

前のページ⑮Python関数

次のページ⑰Pythonファイルi-o

 

スポンサーリンク

プログラミングは独学からは挫折の可能性が高いです。まずは無料体験ができる
コードキャンプが本当におすすめ。無料体験でわからないところを聞きましょう。
転職補助つき。カリキュラム終了後に転職紹介をしてくれます。