メモ代わり。てきとーに。 いや、ですからてきとーですって。 2年前ぐらいにPythonあたりでメールくれた方、ごめんなさい。メール紛失してしまい無視した形になってしまいました。。。

2008年2月29日金曜日

[Python][お勉強] 「Pythonチュートリアル」を読む(8) -- 制御構造

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 コメント: