4章突入。
if文
if <test1>:
<statements1>
elif <test2>:
<statements2>
else:
<statements3>
な感じ。「else if」、[elsif」でもなく「elif」。
for文
あらゆるシーケンスに対し、そのシーケンス内の順序で反復する。
for <var> in <sequence>:
<statements>
な感じ。
ループ内でリスト内のアイテムを更新する際は、リストのコピーをとって反復をかける。
>>> a = [1,2,3,4,5]
>>> for b in a[:]:
... a.insert(0, b)
...
>>> a
[5, 4, 3, 2, 1, 1, 2, 3, 4, 5]
>>>
な感じ。
range()
連続した数字列に対して反復をかけたいときに便利。
>>> range(5)
[0, 1, 2, 3, 4]
>>> range(5, 10)
[5, 6, 7, 8, 9]
>>> range(0,10,3)
[0, 3, 6, 9]
break文、continue文。
Cから持ってきたもの。動きに関してもほぼ一緒。
ループ文にはelseブロックを持たせることができるが、break文で終了した場合はelseブロックは実行されない。
pass文。
なにもしない文。
関数定義
def func(arg):
statements
の形。
「関数をコールするときに渡される実パラメータは、コール時点で、その関数のローカルシンボル表に加えられる。」
とのこと。
extends environmentな感じか。
return文がない場合、またはreturnに式を伴わない場合は、はNoneが返される。
引数のデフォルト値
関数の引数はデフォルト値を指定できる。
デフォルト値が指定されている場合、定義上渡せる引数よりも少ない引数でコールできる。
注意点:デフォルト値は、関数を定義しているスコープで定義した時点で評価される。
以下、その例。
>>> i = 100
>>> def func(aaa = i):
... print aaa
...
>>> i = 99
>>> func()
100
>>>
また、デフォルト値は一度しか評価されない。
以下、その例。
>>> def func(x, aaa = []):
... aaa.append(x)
... return aaa
...
>>> print func(1)
[1]
>>> print func(2)
[1, 2]
>>> print func(3)
[1, 2, 3]
>>>
キーワード引数
キーワード引数も受け取れる。
>>> def func(a, b, c):
... print "a = [%s]" % a
... print "b = [%s]" % b
... print "c = [%s]" % c
...
>>> func(a="aaa", b="bbb", c="ccc")
a = [aaa]
b = [bbb]
c = [ccc]
>>>
な感じ。
キーワード引数を使えば、引数の指定順は任意。
キーワード名には「仮引数」名を使用する。
※突然「仮引数」という言葉が出てきたが、一般的な「仮引数」でよいのだろうか・・・?
良さそうだねー。
仮引数の最後に**名前という形で記述すると、その名前が指す変数はディクショナリとして
仮引数に対応するキーワードを省いた全てのキーワード引数を受け取ることができる。
つまり、仮引数にないキーワードも使えるようになる。
任意引数
引数をタプルで受け取れるようにすれば任意個のパラメータを受け取れるようになる。
>>> func("a","b","c","d","e")
a=[a]
b=[b]
('c', 'd', 'e')
>>>
引数リストのアンパック
>>> def func(a, b, c):
... print "a=[%s]" % a
... print "b=[%s]" % b
... print "c=[%s]" % c
...
>>> L = [1,2,3]
>>> func(*L)
a=[1]
b=[2]
c=[3]
>>>
*演算子を使えば、引数にリストを展開して渡すことができる。
さらに、
**演算子を使えば、引数にキーワード引数としてディクショナリを展開して渡すことができる。
>>> D = { "b":"2", "c":"3", "a":"1"}
>>> func(**D)
a=[1]
b=[2]
c=[3]
>>>
lambda式
無名関数を生成する。が、単一の式しかもてない。
ドキュメンテーション文字列。
ドキュメンテーション文字列がかけるよ、というお話。
おしまい。
.
0 コメント:
コメントを投稿