基本構文
前項まででインストールおよびプログラムの実行方法を学びました。
ここでPythonの基本構文について触れておきます。
尚、PythonではPythonの定義や文が入ったファイルをモジュールと呼びます。
今後は作成ファイルをモジュールと書きますのでご注意ください。
再度コードを書き込むファイルを作成しましょう。
下記コードを書き込んでください。
#! c:/Python26/python.exe
# -*- coding: utf-8 -*-
print u"モジュールのロード"
def test():
print u"関数:testを呼び出しました"
if __name__ == "__main__":
print "python-izm"
# print "パイソンイズム"
test()
書き込んだらファイル名を「test02.py」とし、文字コードを「UTF-8」で作業ディレクトリへ保存します。
これでモジュールの完成です。先程と同じようにプログラムを実行します。
python test02.py
--実行結果--
モジュールのロード python-izm 関数:testを呼び出しました
上記の通り出力されるので、簡単に解説します。
1行目ではPythonのインタープリタへのパスを記述します。
今回のような、単独でのモジュール起動では記述が無くても大丈夫ですが、別のモジュールから今回作成したモジュールをimport(取り込み)したい!というような時には、モジュール内部にインタープリタへのパスを記述しておきます。
必要が無くても記述する癖をつけておきましょう。
#! c:/Python26/python.exe
# -*- coding: utf-8 -*-
print u"モジュールのロード"
def test():
print u"関数:testを呼び出しました"
if __name__ == "__main__":
print "python-izm"
# print "パイソンイズム"
test()
2行目ではモジュールのエンコード宣言を記述します。
今回のモジュールは前回のモジュールには無かった、日本語(マルチバイト文字)が含まれています。
前回のように記述無しで実行すると、日本語(マルチバイト文字)が含まれている場合はエラーとなります。
#! c:/Python26/python.exe
# -*- coding: utf-8 -*-
print u"モジュールのロード"
def test():
print u"関数:testを呼び出しました"
if __name__ == "__main__":
print "python-izm"
# print "パイソンイズム"
test()
6行目に関数、9行目にif文が登場しています。
この関数は、呼び出された際に「関数:testを呼び出しました」と出力するだけの簡単なものです。
#! c:/Python26/python.exe
# -*- coding: utf-8 -*-
print u"モジュールのロード"
def test():
print u"関数:testを呼び出しました"
if __name__ == "__main__":
print "python-izm"
# print "パイソンイズム"
test()
前述した通り、Pythonではブロック構造に「 { 」(中カッコ)を用いない、インデントでのブロック構造となっています。
ですので関数「test」の範囲は7行目、if文の範囲は10行目から13行目となります。
慣れない内は大変ですが、すぐ慣れます。
尚、見た目上はインデントがきちんとしていても、タブと半角スペースが混じったインデントはエラーとなります。(4タブと半角スペース4つ、など)
先程の実行結果に12行目の「パイソンイズム」は出力されませんでしたね?
その理由は12行目、行頭の「#」(シャープ)がPythonではコメントアウト記号となっているからです。
シャープ以降の記述は全て無視されます。
9行目の記述は何よ?とPython覚えたての頃は思っていました。
Pythonのサンプルコードでもよく見かけます。
このif文の部分は、直接スクリプトとして呼び出した時のみ実行されて、別のモジュールから呼び出された時には実行されない、という記述です。
javaでいう「main関数」のようなものですね。
変数「__name__」には、スクリプトとして起動した際に「__main__」という値が入ります。
別のモジュールから呼び出された時には、自身のモジュール名が入るので実行されない、という仕組みです。
#! c:/Python26/python.exe
# -*- coding: utf-8 -*-
print u"モジュールのロード"
def test():
print u"関数:testを呼び出しました"
if __name__ == "__main__":
print "python-izm"
# print "パイソンイズム"
test()
先程の出力結果は下記の通りでしたね?
モジュールのロード python-izm 関数:testを呼び出しました
まず最初に「モジュールのロード」が出力されていますね。
pythonは読み込まれると上から順に処理していきます。
ですので一番最初に「モジュールのロード」が出力されます。
#! c:/Python26/python.exe
# -*- coding: utf-8 -*-
print u"モジュールのロード"
def test():
print u"関数:testを呼び出しました"
if __name__ == "__main__":
print "python-izm"
# print "パイソンイズム"
test()
次に「python-izm」が出力されています。
上から順に処理していますが、7行目のprint文は関数の配下にいるので、test関数が呼ばれない限り実行される事はありません。
さらに下へ行くと、前述したif文があります。
スクリプトとして実行しているので、「__name__」には「__main__」は入っています。
ですのでこの評価式はtrueとなり、if文の中身が実行開始となります。
そしてif文内、最初の命令である「python-izm」が出力されます。
#! c:/Python26/python.exe
# -*- coding: utf-8 -*-
print u"モジュールのロード"
def test():
print u"関数:testを呼び出しました"
if __name__ == "__main__":
print "python-izm"
# print "パイソンイズム"
test()
次の「パイソンイズム」はコメントアウトされているのでスルーされます。
そして最後にtest関数が呼び出されて「関数:testを呼び出しました」が出力される、という順番です。
#! c:/Python26/python.exe
# -*- coding: utf-8 -*-
print u"モジュールのロード"
def test():
print u"関数:testを呼び出しました"
if __name__ == "__main__":
print "python-izm"
# print "パイソンイズム"
test()
困った時はドキュメントを参照しましょう!