2008年9月23日火曜日

Python でジェネレータ式と多重代入の有り難みを実感した

Pythonジェネレータ式多重代入の有り難みを実感した。

for k, v in d.iteritems():
  if v > 123:
    yield k, v

いままで上記のようにしていたのを、

return (item for item in d.iteritems() if item[1] > 123)

これでいいことに気づいた。

% python
Python 2.5.1 (r251:54863, Apr 15 2008, 22:57:26) 
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> d = {'apple': 256, 'hoge': 123, 'orange': 555}
>>> 
>>> def fn_yield():
...   for k, v in d.iteritems():
...     if v > 123:
...       yield k, v
... 
>>> def fn_generator():
...   return (item for item in d.iteritems() if item[1] > 123)
... 
>>> for k, v in fn_yield():
...   print k, v
... 
orange 555
apple 256
>>> for k, v in fn_generator():
...   print k, v
... 
orange 555
apple 256

余談:多値と多重代入について

0 コメント: