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

2008年2月29日金曜日

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

4章突入。

if文

  1. if <test1>:  
  2.   <statements1>  
  3. elif <test2>:  
  4.   <statements2>  
  5. else:  
  6.   <statements3>  
  7.    

な感じ。「else if」、[elsif」でもなく「elif」。

for文
あらゆるシーケンスに対し、そのシーケンス内の順序で反復する。
  1. for <var> in <sequence>:  
  2.    <statements>  
  3.    

な感じ。
ループ内でリスト内のアイテムを更新する際は、リストのコピーをとって反復をかける。
  1. >>> a = [1,2,3,4,5]  
  2. >>> for b in a[:]:  
  3. ...   a.insert(0, b)  
  4. ...  
  5. >>> a  
  6. [5432112345]  
  7. >>>  
  8.    

な感じ。

range()
連続した数字列に対して反復をかけたいときに便利。
  1. >>> range(5)  
  2. [01234]  
  3. >>> range(510)  
  4. [56789]  
  5. >>> range(0,10,3)  
  6. [0369]  
  7.    


break文、continue文。
Cから持ってきたもの。動きに関してもほぼ一緒。

ループ文にはelseブロックを持たせることができるが、break文で終了した場合はelseブロックは実行されない。

pass文。
なにもしない文。


関数定義
  1. def func(arg):  
  2.   statements  
  3.    

の形。

「関数をコールするときに渡される実パラメータは、コール時点で、その関数のローカルシンボル表に加えられる。」
とのこと。
extends environmentな感じか。
return文がない場合、またはreturnに式を伴わない場合は、はNoneが返される。

引数のデフォルト値
関数の引数はデフォルト値を指定できる。
デフォルト値が指定されている場合、定義上渡せる引数よりも少ない引数でコールできる。

注意点:デフォルト値は、関数を定義しているスコープで定義した時点で評価される。
以下、その例。
  1. >>> i = 100  
  2. >>> def func(aaa = i):  
  3. ...   print aaa  
  4. ...  
  5. >>> i = 99  
  6. >>> func()  
  7. 100  
  8. >>>  


また、デフォルト値は一度しか評価されない。
以下、その例。
  1. >>> def func(x, aaa = []):  
  2. ...   aaa.append(x)  
  3. ...   return aaa  
  4. ...  
  5. >>> print func(1)  
  6. [1]  
  7. >>> print func(2)  
  8. [12]  
  9. >>> print func(3)  
  10. [123]  
  11. >>>  
  12.     



キーワード引数
キーワード引数も受け取れる。
  1. >>> def func(a, b, c):  
  2. ...   print "a = [%s]" % a  
  3. ...   print "b = [%s]" % b  
  4. ...   print "c = [%s]" % c  
  5. ...  
  6. >>> func(a="aaa", b="bbb", c="ccc")  
  7. a = [aaa]  
  8. b = [bbb]  
  9. c = [ccc]  
  10. >>>  
  11.    

な感じ。
キーワード引数を使えば、引数の指定順は任意。
キーワード名には「仮引数」名を使用する。

※突然「仮引数」という言葉が出てきたが、一般的な「仮引数」でよいのだろうか・・・?
良さそうだねー。

仮引数の最後に**名前という形で記述すると、その名前が指す変数はディクショナリとして
仮引数に対応するキーワードを省いた全てのキーワード引数を受け取ることができる。
つまり、仮引数にないキーワードも使えるようになる。


任意引数
引数をタプルで受け取れるようにすれば任意個のパラメータを受け取れるようになる。
  1. >>> func("a","b","c","d","e")  
  2. a=[a]  
  3. b=[b]  
  4. ('c''d''e')  
  5. >>>  
  6.    



引数リストのアンパック
  1. >>> def func(a, b, c):  
  2. ...   print "a=[%s]" % a  
  3. ...   print "b=[%s]" % b  
  4. ...   print "c=[%s]" % c  
  5. ...  
  6. >>> L = [1,2,3]  
  7. >>> func(*L)  
  8. a=[1]  
  9. b=[2]  
  10. c=[3]  
  11. >>>  
  12.    

*演算子を使えば、引数にリストを展開して渡すことができる。
さらに、
**演算子を使えば、引数にキーワード引数としてディクショナリを展開して渡すことができる。
  1. >>> D = { "b":"2""c":"3""a":"1"}  
  2. >>> func(**D)  
  3. a=[1]  
  4. b=[2]  
  5. c=[3]  
  6. >>>  
  7.    




lambda式
無名関数を生成する。が、単一の式しかもてない。


ドキュメンテーション文字列。
ドキュメンテーション文字列がかけるよ、というお話。




おしまい。
.

0 コメント: