パイマガ No.13

パイマガ No.13

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
  Python で合格,基本情報技術者試験

  発行 斎藤末広 suehiro3721p@gmail.com @は半角
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
バックナンバー http://jjuku.g.hatena.ne.jp/keyword/PyMaga

========================================================================

 2019年10月25日 13号

=======================================================================
◎Python を動かす

このメルマガは,

 https://notebooks.azure.com (Micorsoft 社提供)

の Jupyter Notebook, Python 3.6 で動作させています。

バックナンバー http://jjuku.g.hatena.ne.jp/keyword/PyMaga
========================================================================
◎Python 即席入門 プログラムの経験向け

 モジュールパッケージ

 クラス,その他のものを部品として利用してくために,モジュールパッケージ
があります。それを話題にします。

------------------------------------------------------------------------
○モジュール

 Python では,プログラムソースファイルの一つ一つがモジュールとなりま
す。(一般的には,モジュールとは,オブジェクト指向では,公開クラスに対応
します。)

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓

import math                # math モジュールのものを,math.○○,として使える
from math import pi        # math モジュールから,pi を pi として使える。
from math import pi as π   # math.pi を π として使える。
import math as M           # math モジュールで公開されているものが,M.○○,で使える。
from math import *         # math モジュールで公開されているものが,その名前のまま使える。

print(math.pi)
print(pi)
print(π)
print(M.pi)

┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

実行すると,

3.141592653589793
3.141592653589793
3.141592653589793
3.141592653589793

と表示されます。

 このように,モジュールを利用するために,予約語(キーワード)の import, from
を使います。

 import の後ろは,import するものを書きます。
 import の後ろに,モジュール名を書けば,モジュール全体が import されます。
 import の後ろに,クラス変数などのオブジェクト名を書けば,そのオブジェクトだけ
が,利用可能になります。その場合は,from をつけて,モジュールを明示します。
 as を追加することで,別名で扱うことができます。

from math import *

 のように * を使うと,math モジュールの利用可能なオブジェクトが,math.○○
とせずに,○○ として使えます。既存にある○○という名称のものは,上書きさ
れる危険があります。

------------------------------------------------------------------------
○パッケージ

 モジュールは,ソースファイルの一つ一つに対応しました。それを保管する
フォルダに対応するのが,パッケージです。

 Python3.3 以前では,パッケージに対応するフォルダ内に,

 __init__.py

 というファイルを必要としましたが,現在では,フォルダ内にモジュールとなる
Pythonソースファイルがあれば,大丈夫です。

 カレント・フォルダに test_pac フォルダを作り,そのフォルダ中に,test.py 
を配置してあるとします。

<test_pac>
			
  • test.py
 test.py の中に,test_v という変数があり,それをインポートするには, 次のようなプログラムとなります。 ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ from test_pac.test import test_v ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ここで,test_v.py が,次の内容だったとします。 ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ #変数 test_v = 3 #関数 def test_f(): print('テスト関数') #クラス class test_c(): def m(): print('テストクラスメソッド') #モジュールの単体テスト等で利用 if __name__ == '__main__': #インポートでなく,直接起動されたら print("単体テストなどに利用'") else: print('テストモジュールを読み込み') ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ 上の import を実行すると テストモジュールを読み込み と表示されます。 これは, ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ #モジュールの単体テスト等で利用 if __name__ == '__main__': #インポートでなく,直接起動されたら print("単体テストなどに利用'") else: print('テストモジュールを読み込み') ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ の部分が実行されたからです。import すると,import 先のモジュールが実行されます。 そこで,環境変数 __name__ にどこかから呼び出さたが入ります。import でなく, そのモジュールを直接実行した場合は,環境変数 __name__ に,'__main__' がセット されます。  現在は,import されましたので,else の中の print('テストモジュールを読み込み') が実行されました。 import したあとに, test_v を実行すると, 3 と表示されます。 ------------------------------------------------------------------------ ○ソースファイル,フォルダの作成方法  Jupyter の ファルダ一覧の画面で,右の方に,[New] と表示されるところが あります。ここで,Text File を選ぶとテキストファイルがカレントドライブ に作れます。Folder を選ぶとフォルダが作成されます。ファイル一覧のところ で,フォルダをクリックするとカレントドライブを移動できます。  上の例では,カレントドライブに,test_pac フォルダを作成し,その中に test.py を作りました。ドライブ名,ファイル名は,先程作ったものをリネーム で作成します。 ------------------------------------------------------------------------ ○モジュール修正した,カーネルの再起動をすること  モジュールを修正して実行した場合,モジュールがキャッシュに入るため 修正が反映しません。それぞれに画面に,更新ボタン(矢印が回転しているもの) があります。これで,Python の実行カーネルを再起動してください。 ------------------------------------------------------------------------ ○モジュールの検索  import したとき,モジュールは,標準モジュールが優先され,次に,sys.path に従って検索されます。sys.path の最初は,カレントフォルダとなってます。  sys.path は,次のプログラムで確認できます。 ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ import sys print(sys.path) ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ 私の環境では,次のように表示されます。 ['', '/home/nbuser/library', '/home/nbuser/anaconda3_501/lib/python36.zip', (以下省略) 最初の '' はカレントフォルダを示します。 ------------------------------------------------------------------------ ○パッケージの配布方法  複雑ですので,こちらでは触れません。試験にも出題されないところかと思わ れます。  参考  https://docs.python.org/ja/3/library/distribution.html ------------------------------------------------------------------------  次号から,予想問題を扱います。初心者向けに,動作しながら,勉強していく 予定です。 バックナンバー http://jjuku.g.hatena.ne.jp/keyword/PyMaga ======================================================================== ぜひ,以下をご返信して,ご意見をおきかせください。 返信すると,suehiro3721p@gmail.com @は半角 に送られます。 感想 質問 扱ってほしいテーマ