Drkcore

14 09 2006 Python Tweet

「みんな」から「ダイブイントゥー」そしてフィボナッチ

みんなのpythonを読んだら、もうちょっと実践的なコードを基に、他の言語と比較しながら説明してあるDive Into Pythonなど読むべし。pythonの初歩からhtml,xmlの処理、そしてSOAPによる通信といった割と基本的な(けど実用的な)章があって、終わりのほうは単体テスト、リファクタリングといったテスト技法や、関数型プログラミングに関しても触れてるので、全体を読んでpythonへの理解はかなり深まった(と思う)。わからないところも、みんなのpython片手にPython ライブラリリファレンスひけば、大概解決したし。

で、17章にフィボナッチ数を求める例があって、そこでジェネレータ使ってたのをみてジェネレータって便利だと理解した。

def fibonacci(max):
        a,b = 0,1
        while a < max:
                yield a
                a, b = b, a+b

for n in fibonacci(1000):
        print n

とfibonacci関数定義するだけでフィボナッチ数が。perlで書いたのと同じようなアルゴリズムなのにperlより簡単にかけているのはyield文のせい。

ProductName みんなのPython
柴田 淳
ソフトバンククリエイティブ / ?円 ( 2006-08-22 )


060914追記

perlでもクロージャ使えば同じようにかけるわ。ということに朝起きたときに気づいた

sub fibonacci {
    my $max = shift;
    my ($fib,$a,$b,) = (0,0,1);
    return sub {
        ($fib,$a, $b) = ($a,$b, $a+$b);
        if ($a < $max){
            return $fib;
        }
    }
}

my $f = fibonacci(100);

pythonにもクロージャってあるんだろうけど、ジェネレータとの使いわけってどうなるんだろうか?

About

  • もう5年目(wishlistありマス♡)
  • 最近はPythonとDeepLearning
  • 日本酒自粛中
  • ドラムンベースからミニマルまで
  • ポケモンGOゆるめ

Tag

Python Deep Learning javascript chemoinformatics Emacs sake and more...

Ad

© kzfm 2003-2021