初めてのPython(3章)
Pythonプログラムの実行方法は大きくは2つ
インポートの方法は
- import モジュール名
- from モジュール名 import 属性名
1行ずつ手で実行
実行したいプログラムを対話型プロンプトのコマンドラインに入力する。
プロンプトの出し方は、ターミナル上で”python”と入力
プロンプトの抜け方は、”quit()” or ”Ctrl+D”
[kobakoba0723@fedora13-intel64 ~]$ python Python 2.6.4 (r264:75706, Apr 1 2010, 02:55:51) [GCC 4.4.3 20100226 (Red Hat 4.4.3-8)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> print 'Hello World' Hello World >>> 'Hello World' 'Hello World' >>>
プロンプトの場合、演算結果が自動的に出力される。
ターミナルからファイルを使う場合、出力は明示的に行わないといけない。
プログラムを書いたファイルで実行
対話型プロンプトは手軽に実行できるが、プログラムが実行されると消えてしまうことが欠点。
記述量が少ないうちは毎回入力すれば済むが、量が増えると大変なので、プログラムをファイルに記録することが有用。
実行したいプログラムを記録したファイルをモジュールファイルと呼ぶ。
モジュールファイルからの実行方法は3つ
実行するのは、hello.py
/usr/bin/env python print 'Hello World'
コマンドプロンプトからインタプリタに渡す
[kobakoba0723@fedora13-intel64 ~]$ python hello.py Hello World [kobakoba0723@fedora13-intel64 ~]$
対話型プロンプトでインポート
対話型プロンプトを立ち上げて、”import ファイル名(拡張子を除く)”と入力する
モジュールをインポートする処理が走るので、プロンプトを抜けると.pycファイルが作成されている
[kobakoba0723@fedora13-intel64 ~]$ ls anaconda ダウンロード デスクトップ ビデオ 画像 hello.py テンプレート ドキュメント 音楽 公開 [kobakoba0723@fedora13-intel64 ~]$ python Python 2.6.4 (r264:75706, Apr 1 2010, 02:55:51) [GCC 4.4.3 20100226 (Red Hat 4.4.3-8)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import hello Hello World >>> [kobakoba0723@fedora13-intel64 ~]$ ls anaconda hello.pyc テンプレート ドキュメント 音楽 公開 hello.py ダウンロード デスクトップ ビデオ 画像 [kobakoba0723@fedora13-intel64 ~]$
ファイルアイコンをクリック
出来るんだろうけど使わないだろう。
モジュールのインポートとリロード
モジュールのインポートは、プログラムを書く上で不可欠な操作。
インポートを実行することで、モジュールの内容にアクセスできるようになる。
モジュール外部からアクセスできる内容を属性と呼ぶ。
モジュールのインポートはモジュール毎に1回のみ。
内容を編集し再インポートする時はリロード[reload(モジュール名)]
以下のhoge.pyを使って実験
(hoge.py)
#!/usr/bin/env python print 'hogehoge' print 'module hoge is executed'
まずimport
[kobakoba0723@fedora13-intel64 ~]$ python Python 2.6.4 (r264:75706, Apr 1 2010, 02:55:51) [GCC 4.4.3 20100226 (Red Hat 4.4.3-8)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import hoge hogehoge module hoge is executed >>> import hoge >>>
#!/usr/bin/env python print 'hogehoge' print 'piyopiyo' print 'module hoge is executed'
修正したものをインポート、リロード。
>>> import hoge >>> reload(hoge) hogehoge piyopiyo module hoge is executed <module 'hoge' from 'hoge.py'>
インポートしても何も変わらないけど、リロードすると変更した内容が実行される。
モジュールの属性
「外部から利用できる内容」を属性というが、もう少し細かくいうと「外部から利用できる名前」が属性。
hoge.pyのprint文なんかはインポート時に1回だけ実行されて、それ以降は利用できないので属性ではない。
属性に該当するのは、変数・関数・クラス。
そして、属性の集まりを名前空間と呼び、各モジュール毎に独立して存在している。
インポート処理は、別モジュールの名前空間を現在のモジュールに読み込む処理のこと。
名前空間の内容は、dir()関数で表示できる
インポート処理には
import_sample.pyを使って実験
(import_sample.py)
#!/usr/bin/env python a = 'spam' b = 'eggs' c = 10 print a, b, c
import モジュール名
この方法でインポートすると、モジュールの名前空間全体がインポートされる。
インポートした属性には、(モジュール名).(属性名) でアクセスする。
[kobakoba0723@fedora13-intel64 ~]$ python Python 2.6.4 (r264:75706, Apr 1 2010, 02:55:51) [GCC 4.4.3 20100226 (Red Hat 4.4.3-8)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> dir() ['__builtins__', '__doc__', '__name__', '__package__'] >>> import import_sample spam egg 10 >>> dir() ['__builtins__', '__doc__', '__name__', '__package__', 'import_sample'] >>> dir(import_sample) ['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'a', 'b', 'c'] >>> import_sample.a 'spam' >>> import_sample.b 'egg' >>> import_sample.c 10 >>> [kobakoba0723@fedora13-intel64 ~]$
from モジュール名 import 属性名
この方法でインポートすると、特定の属性のみが直接インポートされる。
インポートした属性は、インポート元の名前空間にそのまま存在するので、(属性名)でアクセス可能。
[kobakoba0723@fedora13-intel64 ~]$ python Python 2.6.4 (r264:75706, Apr 1 2010, 02:55:51) [GCC 4.4.3 20100226 (Red Hat 4.4.3-8)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> dir() ['__builtins__', '__doc__', '__name__', '__package__'] >>> from import_sample import a, b, c spam egg 10 >>> dir() ['__builtins__', '__doc__', '__name__', '__package__', 'a', 'b', 'c'] >>> a 'spam' >>> b 'egg' >>> c 10 >>> [kobakoba0723@fedora13-intel64 ~]$