Python学習ノート(4)―モジュール


モジュールは基本的に、定義したすべての関数と変数を含むファイルです.他のプログラムでモジュールを再利用するには、モジュールのファイル名を.pyで拡張子にする必要があります.
       モジュールは、他のプログラムから入力して機能を利用することができます.これもPython標準ライブラリを使用する方法です.まず、標準ライブラリモジュールの使用方法について説明します.
sysモジュールの使用
#!/usr/bin/python
# Filename: using_sys.py
import sys
print 'The command line arguments are:'
for i in sys.argv:
    print i

実行結果
$ python using_sys.py we are arguments
The command line arguments are:
using_sys.py
we
are
arguments

さぎょうげんり
       まず,import文を用いてsysモジュールを入力する.基本的に、この文はPythonにこのモジュールを使用したいと伝えています.SysモジュールにはPython解釈器とその環境に関する関数が含まれている.
       Pythonがimport sys文を実行すると、sys.path変数にリストされているディレクトリにsys.pyモジュールが見つかります.このファイルが見つかった場合、このモジュールのメインブロックの文が実行され、このモジュールが使用できます.初期化プロセスは、モジュールを初めて入力したときにのみ行われます.
       Sysモジュールのargv変数は、ポイント番号を使用して、sys.argvを示す方法の1つの利点は、この名前があなたのプログラムで使用されるargv変数と衝突しないことです.また,この名前がsysモジュールの一部であることも明確に示している.
   ここでpython using_を実行するとSys.py we are argumentsの場合、pythonコマンドを使用してusing_を実行します.Sys.pyモジュールは,後続する内容をパラメータとしてプログラムに渡す.Pythonはsys.argv変数に格納します.
    スクリプトの名前はsys.argvリストの最初のパラメータであることを覚えておいてください.だから、ここで、'using_Sys.py'はsys.argv[0]、'we'はsys.argv[1]、'are'はsys.argv[2]、'arguments'はsys.argv[3]である.Pythonは1からではなく0からカウントを開始することに注意してください.
     Sys.pathには、入力モジュールのディレクトリ名のリストが含まれています.sys.pathの最初の文字列は空であることが観察された.この空の文字列は、現在のディレクトリもsys.pathの一部であることを示し、PYTHONPATH環境変数と同じである.これは、現在のディレクトリにあるモジュールを直接入力できることを意味します.そうでなければ、sys.pathにリストされているディレクトリの1つにモジュールを置かなければなりません.
モジュールの_name__
   各モジュールには名前があり、モジュール内で文でモジュールの名前を見つけることができます.これは、前述したように、モジュールが最初に入力されると、このモジュールのメインブロックが実行される場合に特に有用である.プログラム自体が使用されているときにプライマリブロックを実行し、他のモジュールに入力されているときにプライマリブロックを実行しない場合は、どうすればいいですか?これはモジュールのname__属性が完了しました.
例2:
#!/usr/bin/python
# Filename: using_name.py
if __name__ == '__main__':
    print 'This program is being run by itself'
else:
    print 'I am being imported from another module'

実行結果
$ python using_name.py
This program is being run by itself
                                                                                                                         
$ python
>>> import using_name
I am being imported from another module
>>>

 各Pythonモジュールにはその_があります.name__,もしそれが'_だったらmain__',これは、このモジュールがユーザーによって単独で実行され、対応する操作が可能であることを示しています.
自分のモジュールを作成する方法
       自分のモジュールを作成するのは簡単です.あなたはずっとこのようにしています.各Pythonプログラムもモジュールです..py拡張子があることを確認しました.次の例では、より明確になります.
例3
#!/usr/bin/python
# Filename: mymodule.py
def sayhi():
    print 'Hi, this is mymodule speaking.'
version = '0.1'
                                                                                                           
# End of mymodule.py

モジュールの例を示します.私たちの普通のPythonプログラムに比べて特別なところはありません.次に、他のPythonプログラムでこのモジュールを使用する方法を見てみましょう.
このモジュールは、入力したプログラムの同じディレクトリに配置されるか、sys.pathにリストされているディレクトリの1つに配置されるべきであることを覚えておいてください.
#!/usr/bin/python
# Filename: mymodule_demo.py
                                                                                                       
import mymodule
                                                                                                       
mymodule.sayhi()
print 'Version', mymodule.version

実行結果
$ python mymodule_demo.py
Hi, this is mymodule speaking.
Version 0.1

どのように動作しますか?
   モジュールのメンバーを使用するには、同じポイント番号を使用していることに注意してください.Pythonは同じ記号をよく再利用しており、私たちPythonプログラマーは新しい方法を絶えず学ぶ必要がありません.
from..import
以下はfrom..import構文を使用したバージョンです.
#!/usr/bin/python
# Filename: mymodule_demo2.py
                                                                                   
from mymodule import sayhi, version
# Alternative:
# from mymodule import *
                                                                                   
sayhi()
print 'Version', version

モジュールとパッケージ
1.モジュールは以下の3つの方法で参照できる
(1)import
(2)import ... as ...
(3)from ... import ...
たとえば:
[root@node1 python]# python say.py
Hello World
                                                                             
[root@node1 python]# cat say.py
#!/usr/bin/python
def say():
    print 'Hello World'
say()
                                                                             
[root@node1 python]# cat saysomething.py
import say
[root@node1 python]# python saysomething.py
Hello World

(1)
[root@node1 python]# cat saysomething.py
import say
say.say()
[root@node1 python]# python saysomething.py
Hello World

(2)
[root@node1 python]# cat saysomething.py
import say as s
s.say()
[root@node1 python]# python saysomething.py
Hello World

(3)
[root@node1 python]# cat saysomething.py
from say import say
say()
[root@node1 python]# python saysomething.py
Hello World

2.パッケージ
パッケージの構造は、ディレクトリに存在する必要があります.init_.pyファイルでいいです
[root@node1 python]# mkdir add
[root@node1 python]# vim add/operator.py
#!/usr/bin/python
def f(x,y):
    return x+y
                                                  
[root@node1 python]# touch add/__init__.py
[root@node1 python]# vim  test.py
#!/usr/bin/python
import add.operator
print add.operator.f(1,2)
                                                  
[root@node1 python]# python test.py
3