pythonはじめてみました。

やっぱり一つくらいはスクリプト言語ができたほうがいいだろうと思い、自分のまわりでrubyが流行っていたので、天邪鬼な俺はpythonを勉強してみることにしました。以下、初心者の雑感。


まず、pythonで一番特徴的なことは、インデントをロジックの区切りとして扱うこと。これはとても見た目的に分りやすい。けれども、問題があります。それはコピペがしにくいこと。まぁ、コピペを繰り返すのはバグの温床になりやすいから、意図的にコピペを排除しているとも考えられるかも。はじめからコピペの必要がないプログラムを目指すべきですね。


面白いと思ったのがfor文のループ。リスト、タプル、それに文字列やファイルでも、大抵のコンテナオブジェクトにわたってループができる。これはシンプルでとても分かりやすい。
ほかに、自分で定義のクラスにも、__iter__()メソッドとnext()メソッドを定義すればループが可能になる、らしいです。このあたりはまだ自分もよく分かってないですが。

http://python.amayus.com/python/tut/node11.html


ほかに気づいたことは、シーケンス型(リスト、タプル)のインデックが負値だと、後ろからのインデックスになる。
これは便利そうだけど、うっかりすると動くけど間違っているわかりにくいバグの温床になりそう。


入門のシメとして、ざっくりfizzbuzzを書いてみる。
まずは、特にひねったところもなく普通に4分岐でやってみる。

for i in range(1,100 + 1):
    if i % 15 == 0:
        print "FizzBuzz"
    elif i % 5 == 0:
        print "Buzz"
    elif i % 3 == 0:
        print "Fizz"
    else:
        print i

インデントのおかげで、ロジックがとても分かりやすいですね。
でも、これだけだとあまりにカッコ悪いので、ワンライナーで書いてみます。
pythonでは、文字列*整数や文字列*ブール型という演算ができて、
たとえば、
>'abc'*3
abcabcabc
とか
>'abc'*False
''
という書きかたができます。これを使って、

>for i in range(1,101):'fizz'*(i%3==0)+'buzz'*(i%5==0) or i

でOK。ちなみに数えてみたら59文字でした。もっと短かくなるんかな?