2012年6月3日日曜日

初めてのPython 17章

lambdaを関数にネストする
>>> def func():
        x = 4
        action = (lambda n: x**n)
        return action
>>> x = func()
>>> x(4)
256
ループ内でlambdaを定義した場合は最後の変数が使われるので注意
>>> def makeActions():
...     acts = []
...     for i in range(5):
...         acts.append(lambda x: i**x)
...     return acts
...
>>> acts = makeActions()
>>> acts[0](2) #4**2になる
16
>>> acts[0](0) #4**0
1
>>> acts[2](2) #4**2
16

こうならないためにはデフォルト引数で指定しておく。
lambdaが作られるときの値がつかわれる。
>>> def makeActions():
...     acts = []
...     for i in range(5):
...         acts.append(lambda x, i=i: i**x)
...     return acts
...
>>> acts = makeActions()
>>> acts[0](2)
0
>>> acts[2](2)
4

nonlocalは飛ばして次へ~

0 件のコメント:

コメントを投稿