if expression:
suite...
[elif expr:
suite...]
[else:
suite...]
if は「もし」を意味します。式が真であれば、インデントされたブロックを実行します。下記の例では、num の値が 10より大きければ BIG を3回表示します。
if num > 10:
print "BIG"
print "BIG"
print "BIG"
else は「さもなくば」を意味します。下記の例では、num が 10より大きければ BIG を、さもなくば SMALL を表示します。
if num > 10:
print "BIG"
else:
print "SMALL"
elif は「さもなくばもし」を意味します。下記の例では、num が 10より大きければ BIG を、10と等しければ NORMAL を、さもなくば SMALL を表示します。
if num > 10:
print "BIG"
elif num == 10:
print "NORMAL"
else:
print "SMALL"
if文では、False、数値の 0 や 0.0、空文字("")、空リスト([])、空タプル(())、空辞書({})などを偽とみなし、それ以外を真とみなします。
while expression:
suite...
[else:
suite...]
while は「~のあいだ」を意味します。下記の例では、i の値が 10よりも小さい間 i の値を表示します。
n = 0
while n < 10:
print n
n += 1
else がある場合は、ループの最後に else節を実行します。
n = 0
while n < 10:
print n
n += 1
else:
print 'END'
for var in expression:
suite...
[else:
suite...]
for はリスト、タプルの各要素、辞書のキー、文字列の各文字、ファイルの各行などに対して処理を繰り返します。
for n in [1, 2, 3]:
print n #=> 1, 2, 3
for n in (1, 2, 3):
print n #=> 1, 2, 3
for k in {'one': 1, 'two': 2, 'three': 3}:
print k #=> one, two, three
for c in "123":
print c #=> 1, 2, 3
for line in open("sample.txt"):
print line # 1行ずつ表示
処理を10回繰り返したい場合は range() を用います。
for n in range(10):
print n
文字列に指定した場合は、それぞれの文字に対して実行します。
for c in u'あいうえお':
print c # あ, い, う, え, お
else がある場合は、ループの最後に else節を実行します。
for n in [1, 2, 3]:
print n
else:
print 'END'
break は最も内側の while, for などのループ処理を抜けます。下記の例では n が 5の時に forループを抜けます。
for n in range(10):
if n == 5:
break
print n # 0, 1, 2, 3, 4
continue は最も内側の while, for などのループ処理を繰り返します。下記の例では n が 5の時に forループの先頭に戻ります。
for n in range(10):
if n == 5:
continue
print n # 0, 1, 2, 3, 4, 6, 7, 8, 9
try:
suite...
[except [expression]:
suite...]
[else:
suite...]
[finally:
suite...]
try, except, else, finally は例外を扱います。
str = 'ABC'
try:
c = str[5] # 5番目の文字が無いので、IndexError例外が発生します
except IOError:
print 'IOError' # IOError例外の場合、このブロックが実行されます
except IndexError:
print 'IndexError' # IndexError例外の場合、このブロックが実行されます
except:
print 'Unknown' # 上記以外の例外の場合、このブロックが実行されます
else:
print 'Other' # 例外が発生しなかった場合、このブロックが実行されます
finally:
print 'Finally' # 常に、このブロックが実行されます
raise は例外を発生させます。下記の例は、直近に発生した例外を再発生させます。例外が発生していない場合は TypeError例外を発生させます。
try:
...
except:
raise
下記の例は、SystemErrorクラスのインスタンスを生成し、これを引数に例外を発生させます。
try:
raise SystemError('Error message')
except SystemError as e:
print "SystemError"
print e
下記の例は、'Error message' を引数に SystemError のコンストラクタを呼び出し、生成したインスタンスを引数に例外を発生させます。
try:
raise SystemError, 'Error message'
except SystemError as e:
print "SystemError"
print e
下記の例では自作した例外に引数を与え、生成したインスタンスを引数に例外を発生させています。
class MyError(Exception):
def __init__(self, file, lineno):
self.file = file
self.lineno = lineno
try:
raise MyError("test.txt", 1163)
except MyError as e:
print "MyError"
print e.file
print e.lineno
例外処理の中で例外を発生させるには、次のパターンがあります。
# 元の例外をそのまま投げる excent Exception as e: raise e # 新たな例外を生成して投げる excent Exception: raise MyError() # 元の例外情報をつけて、新たな例外を投げる excent Exception as e: raise MyError() from e # 元の例外を無視して、新たな例外を投げる excent Exception: raise MyError() from None
with expression [as target] [, expression [as target]]... :
suite...
with を用いると、withブロックが終了した際に、オブジェクトの終了処理が自動的に呼ばれます。例えば、open() で返却される file オブジェクトは、終了処理として、close() が自動的に呼び出されます。下記の例で、with を用いた書き方では、withブロックが終了した際に f.close() が自動的に呼び出されます。
# withを用いない書き方
f = open("test.txt")
print f.read()
f.close()
# withを用いた書き方1
with open("test.txt") as f:
print f.read()
# withを用いた書き方2
f = open("test.txt")
with f:
print f.read()
assert はテストの際に値が期待通りに設定されているかを確認するための仕組みです。__debug__ が True の時のみ動作し、式を評価して偽であれば、AssertionError例外を発生させます。python を -O オプション付きで起動することで、__debug__ の値は False になります。
f = func() assert f == 5 # f の値が期待通り 5になっていることを確認する
assert expression は、下記と等価です。
if __debug__:
if not expression: raise AssertionError
assert expression1, expression2 は、下記と等価です。
if __debug__:
if not expression1: raise AssertionError(expression2)
pass は何もしない文です。中身の無い関数やクラスを作成する際に使用されます。
def myfunc():
pass
class MyClass:
pass
del はオブジェクトを削除します。
x = 5 y = [1, 2, 3] z = MyClass() del x, y, z
print は変数やオブジェクトを標準出力に出力します。Python 3 では実装が変わっているので、ここでは、Python 2 の print文について説明します。
print 3 #=> 3
print [1, 2, 3] #=> [1, 2, 3]
print (1, 2, 3) #=> (1, 2, 3)
print {'k1':10, 'k2':20} #=> {'k2': 20, 'k1': 10}
引数をカンマ(,)で複数指定すると、ひとつのスペースで区切って複数の値を表示します。
print "AAA", "BBB" #=> AAA BBB
通常は、最後に改行(\n)を書き出します。最後の引数の後ろにカンマ(,)をつけると、改行しません。
print "AAA", # 改行しない print "BBB" # 改行する
下記の様に、フォーマットを指定することもできます。
print "My name is %s." % "Tanaka"
print "%s is %d years old." % ("Tanaka", 28)
print "%(name)s is %(age)d years old." % {'name': "Tanaka", 'age': 28}
標準出力以外に出力するには、>> を用います。
f = open("test.txt", "w")
print >> f, "Hello world!"
f.close()
print文で複数の値を出力すると半角スペースで区切られますが、半角スペースを入れたくない場合は、sys.stdout.write() を使用します。
import sys
sys.stdout.write("Hello")
sys.stdout.write("World")
exec文(exec)は、引数の文字列を Python のスクリプトとして実行します。
exec statements [as global [, local]]
サンプルを下記に示します。
exec "print 'Hello'"
global と local には、グローバル変数、ローカル変数を辞書形式で渡します。ローカル変数を省略した場合は、global が両方に適用されます。
exec "print global_x, local_y" in {'global_x': 100}, {'local_y': 200}
statements にはオープンしたファイルや、コンパイルしたコードオブジェクトを渡すこともできます。
f = open("sample.py")
exec f
code = compile("print 'Hello'", "<string>", "exec");
exec code