3.4. 変数の宣言

さて辞書やタプルやリスト (なんと!) についていくらか学んだので, 2 章 のサンプルプログラム odbchelper.py に戻りましょう.

他のほとんどの言語と同じように, Python にはローカル変数とグローバル変数がありますが, 明示的な変数宣言はありません. 変数は値を割り当てられると出現し, スコープを外れると自動的に破棄されます.

Example 3.17. 変数 myParams の定義


if __name__ == "__main__":
    myParams = {"server":"mpilgrim", \
                "database":"master", \
                "uid":"sa", \
                "pwd":"secret" \
                }

インデントに注意してください. if 文はコードブロックであり関数のようにインデントを付ける必要があります.

また, 変数割り当てという 1 つの命令が, バックスラッシュ (“\” 訳注. 環境によっては円マークに見えるかもしれません) という行継続記号によって複数行に分割されているのに注意してください.

Note
行継続記号 (“\”) を使って 1 つの命令を複数行に分割するときには, 継続する行のインデントは好きなように付けられます. Python の通常の厳格なインデントのルールは適用されません. Python IDE が自動で継続行にインデントを付ける場合には, 重大な理由がない限りデフォルトのインデントを受け入れた方が良いでしょう.

厳密に言うと, 丸括弧や角括弧や (辞書の定義のときのような) 波括弧の途中では, 行継続文字 (“\”) を使っても使わなくても複数行に分割できます. ただ, 私はコードを読むのが簡単になると考えるので, 必要が無いときでもバックスラッシュを書く方が好きです. これは書き方のスタイルの問題です.

3 つ目に, 変数 myParams の宣言を一切せず, 単に値を割り当てているのに注意してください. これは option explicit オプションを外した VBScript に似ています. 幸いなことに, VBScript と違って, Python では値が割り当てられていない変数を参照することはできません. 参照しようとすると例外が送出されます.

3.4.1. 変数の参照

Example 3.18. 未割り当ての変数の参照

>>> x
Traceback (innermost last):
  File "<interactive input>", line 1, in ?
NameError: There is no variable named 'x'
>>> x = 1
>>> x
1

いつか Python の有り難みが分かりますよ.

3.4.2. 一度に複数の値を割り当てる

Python の格好良いショートカットの 1 つが, シーケンスを使って一度に複数の値を割り当てることです.

Example 3.19. 一度に複数の値を割り当てる

>>> v = ('a', 'b', 'e')
>>> (x, y, z) = v     1
>>> x
'a'
>>> y
'b'
>>> z
'e'
1 v は 3 つの要素からなるタプルで, (x, y, z) は 3 つの変数からなるタプルです. 前者を後者に割り当てると, v の要素の値を順番に変数に割り当てます.

これには色々な使い道があります. 私はある範囲の値に名前を付けたいことがよくあります. C では, enum を使ったり (訳注. ここは and で連接されていますが, 意味が通らないので or のように訳しました), 手作業で定数と値を列挙するでしょうが, 値が連続している場合は特に面倒に感じます. Python では, 組み込みの range 関数と複数変数割り当ての仕組みを使って, 簡単に連続した値を割り当てることができます.

Example 3.20. 連続した値を割り当てる

>>> range(7)                                                                    1
[0, 1, 2, 3, 4, 5, 6]
>>> (MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY) = range(7) 2
>>> MONDAY                                                                      3
0
>>> TUESDAY
1
>>> SUNDAY
6
1 組み込みの range 関数は整数のリストを返します. 最も単純な呼び出し方法では引数に上限を取り, 0 から上限の手前までの整数の増加列を返します. (もし必要なら, 0 以外の開始値や 1 以外の差分値を引数で渡すことができます. 詳細は print range.__doc__ を出力して参照してください.)
2 MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, and SUNDAY は今定義している変数です. (この例は calendar モジュールから取ってきたもので, その小さな楽しいモジュールは UNIXcal プログラムのようにカレンダーを出力します. calendar モジュールでは曜日に整数定数を対応させています.)
3 もうここでそれぞれの変数には値が割り当てられていて, MONDAY0, TUESDAY1, 以下同様です.

複数変数割り当ての仕組みを使って, 全ての値をタプルにまとめて返すことで, 複数値を返す関数が作れます. 呼び出し側はそれをタプルとして扱うこともできますし, 別の変数に値を割り当てることもできます. Chapter 6 で議論する os モジュールなど, 多くの Python の標準ライブラリはそのようにしています.

変数についてさらに知るには