Python Tips, Tricks, and Hacks という記事を読んで
Python Tips, Tricks, and Hacks - Siafoo
いやー、Python の初学者には勉強になる記事だった。
一番驚いたのは「5.1 Default Argument Values are Only Evaluated Once」のセクションだね。
これは一種のバグと言えるような気がしないでもない。
On the plus side, a clever programmer could probably turn this into a trick, in effect creating C-style 'static variables'.
とあるけど、ホントかなぁ。。。たとえ上手い使い方があったとしても、美しいコードにはならないと思う。
使えそうだと思ったのは「2.1.4 Generator Expressions」
これって要するに遅延評価しているわけだよね。
def f(n): return n*n generator = (f(n) for n in [1, 2, 3]) f = lambda n: 2*n for n in generator: print n
これの実行結果は
2 4 6
となる一方、
def l(): return [1, 2, 3] generator = (n for n in l()) l = lambda: [1, 2] for n in generator: print n
これの実行結果は
1 2 3
となる。
そして
def fibs(): a, b = 0, 1 while True: yield b a, b = b, a+b generator = (n for n in fibs()) for i in range(10): print generator.next()
これの実行結果は
1 1 2 3 5 8 13 21 34 55
となる。ふーん。