必要な機能を実装するための Python モジュールのインポート

高洛峰
リリース: 2017-03-24 15:56:26
オリジナル
1539 人が閲覧しました

モジュールを使用すると、Pythonコード スニペットを論理的に整理できます。

関連するコードをモジュールに割り当てると、コードがより使いやすく、理解しやすくなります。

モジュールも Python オブジェクトであり、バインドまたは参照に使用されるランダムな名前属性が付いています。

簡単に言うと、モジュールは Python コードを保存するファイルです。モジュールは、関数、クラス、変数を定義できます。モジュールには実行可能コードを含めることもできます。

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

defprint_func( par ):

print "Hello : ", par

import ステートメント

Python ソース ファイルを使用したい場合は、別のソース ファイルで import ステートメントを実行するだけです。構文は次のとおりです。

importmodule1[, module2[,... moduleN]

インタプリタが import ステートメントに遭遇すると、モジュールが現在の検索パスにあればインポートされます。

検索パスは、インタープリターが最初に検索するすべてのディレクトリのリストです。モジュール hello.py をインポートしたい場合は、スクリプトの先頭にコマンドを置く必要があります:

#!/usr/bin/python

# モジュールのインポート

import support

# これで、次のコマンドを呼び出すことができます。モジュールに含まれる関数

support.print_func("Zara")

上記の例の出力結果:

Hello : Zara.

モジュールは、何度実行しても、インポートされるのは 1 回だけです。輸入。これにより、インポートされたモジュールが何度も実行されるのを防ぎます。


From…import ステートメント

Python の from ステートメントを使用すると、指定した部分をモジュールから現在の名前空間にインポートできます。構文は次のとおりです:

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

たとえば、モジュール fib のフィボナッチ関数をインポートするには、次のステートメントを使用します:

>>> from fib import fibonacci

このステートメントは、fib モジュール全体を現在の名前空間にインポートするのではなく、このステートメントを実行するモジュールのグローバル シンボル テーブルに fib 内の 1 つの fibonacci を導入するだけです。


From...import * ステートメント

次のステートメントを使用するだけで、モジュールのすべてのコンテンツを現在の名前空間にインポートすることもできます:

>>>from mod_name import *

Thisモジュール内のすべてのプロジェクトをインポートする簡単な方法を提供します。ただし、このステートメントは乱用すべきではありません。


モジュールの検索

モジュールをインポートする場合、Python パーサーによるモジュールの場所の検索順序は次のとおりです:

  • 現在のディレクトリ

  • 現在のディレクトリにない場合、Python は次のディレクトリの下で各モジュールを検索します。シェル変数 PYTHONPATH 目次

  • どちらも見つからない場合、Python はデフォルトのパスをチェックします。 UNIX では、通常、デフォルトのパスは /usr/local/lib/python/

です。モジュール検索パスは、システム モジュールの sys.path 変数に保存されます。変数には、現在のディレクトリ、PYTHONPATH、およびインストール プロセスによって決定されるデフォルトのディレクトリが含まれます。


PYTHONPATH変数

環境変数として、PYTHONPATHはリストにインストールされた多数のディレクトリで構成されます。 PYTHONPATH の構文は、シェル変数 PATH の構文と同じです。

Windows システムの場合、一般的な PYTHONPATH は次のとおりです:

set PYTHONPATH=c:python20lib;

UNIX システムの場合、一般的な PYTHONPATH は次のとおりです:

set PYTHONPATH=/usr/local/lib/python

名前空間と関数 ドメイン

変数は、一致するオブジェクトを保持する名前(識別子)です。名前空間は、変数名 (キー) とそれに対応するオブジェクト (値) を含む辞書です。

Python

は、ローカル名前空間とグローバル名前空間の変数にアクセスできます。ローカル変数がグローバル変数と同じ名前を持つ場合、ローカル変数はグローバル変数をオーバーライドします。

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

Python は、関数内で割り当てられた変数がローカルであると仮定して、変数がローカルであるかグローバルであるかをインテリジェントに推測します。

したがって、関数内のグローバル変数に値を代入したい場合は、global ステートメントを使用する必要があります。

グローバル VarName の式は、VarName がグローバル変数であることを Python に伝えるため、Python はローカル名前空間でこの変数を検索しません。

たとえば、グローバル名前空間で変数moneyを定義します。次に、関数内の変数moneyに値を代入すると、Pythonはmoneyがローカル変数であると想定します。ただし、アクセスする前にローカル変数 Money を宣言していないため、結果は UnboundLocalError になります。この問題は、グローバル ステートメントのコメントを解除することで解決できます。>>>#!/usr/bin/python

>>>Money = 2000

>>>def AddMoney():

# コードを修正したい場合、次のコメントを外します ;

dir

( ) 関数

dir() 関数は

strings

のソートされたリストであり、その内容はモジュールで定義された名前です。

返されるリストには、モジュールで定義されているすべてのモジュール、変数、関数が含まれます。これは簡単な例です:

>>>#!/usr/bin/python

>>># 組み込み数学モジュールをインポートします

>>>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'、'ラジアン'、'sin'、'sinh ',

'sqrt ', 'tan', 'tanh']

ここで、

特殊文字

文字列変数nameはモジュールの名前を指し、fileはモジュールのインポートされたファイルの名前を指します。

globals() 関数と locals() 関数

呼び出される場所に応じて、globals() 関数と locals() 関数を使用して、グローバル名前空間とローカル名前空間の名前を返すことができます。

locals() が関数内で呼び出された場合、関数内でアクセスできるすべての名前が返されます。

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

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

reload() 関数

モジュールがスクリプトにインポートされるとき、モジュールのトップレベル部分のコードは 1 回だけ実行されます。

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

>>>reload(module_name)

ここで、 module_name には文字列形式ではなくモジュールの名前を直接入力する必要があります。たとえば、hello モジュールをリロードする場合は、次のようにします:

>>>reload(hello)

Python のパッケージ

パッケージは、モジュールとモジュールを定義する階層的なファイル ディレクトリ構造です。 sub-package 、およびサブパッケージの下のサブパッケージで構成される Python アプリケーション環境。

電話ディレクトリ内の Pots.py ファイルについて考えてみましょう。このファイルには次のソース コードがあります:

>>>#!/usr/bin/python

>>>def Pots():

print "I'm Pots Phone"

同様に、異なる関数を保存する他に 2 つのファイルがあります:

Phone/Isdn.py には関数 Isdn() が含まれます

Phone/G3.py には関数 G3() が含まれます

さて、Phone以下のファイル init.py を作成します:

    Phone/init.py
  • Phone をインポートするとき、すべての機能を使用できるようにするには、次のように init.py で明示的なインポート ステートメントを使用する必要があります。 :
  • >>>from Pots import Pots

  • >>>from Isdn import Isdn

>>>from G3 import G3

    これらのコードを init.py に追加した後、インポートします電話 これらのクラスはすべてパッケージ化すると利用できます。
  • >>>#!/usr/bin/python

  • >>># 次に、電話パッケージをインポートします。

>>>電話をインポート

>>> 。 Pots()

>>>Phone.Isdn()

>>>Phone.G3()

上記の例の出力結果:

I'm Pots Phone

I'm 3G Phone

I'm ISDN Phone

上記のように、例のために、各ファイルに関数を 1 つだけ配置しましたが、実際には多くの関数を配置できます。これらのファイルで Python クラスを定義し、これらのクラスのパッケージを構築することもできます。

以上が必要な機能を実装するための Python モジュールのインポートの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!