Python の嵌りどころ
Google のおかげで一気に Python の人気がでてきそうですね!
Python は教育言語なんて側面もあるので、言語仕様も小さくて覚えやすいんだけど、
少し一般的でなくて嵌ることもあります。
折角なので僕が Python をやって嵌ったところを書いてみます。
switch 文は無い
無いです。
default が有る時点で邪悪だって誰かが言ってました。
substring は文字列に配列としてアクセスすればOK
Java や js の substring、Perl の sbstr みたいなの
>>> 'hogehoge'[5] 'o' >>> 'hogehoge'[5:7] 'og' >>> 'hogehoge'[5:] 'oge' >>> 'hogehoge'[:5] 'hogeh' >>>
ちなみに一文字でも文字列なのでこんな事も出来ます。
>>> 'hogehoge'[5][0] 'o' >>> 'h'[0] 'h'
&& や || は無い
よく条件文などで使う && や || は Python にはありません。
変わりに良くつかわれるのが and と or ですが、すこし動きが違います。
まず、真偽値は返ってきません。
and の時は
左辺が真の場合は右辺が返ってきます。
左辺が偽の場合は左辺が返ってきます。
or の時は
左辺が真の場合は左辺が返ってくる。
左辺が偽の場合は右辺が返ってくる。
>>> a = 'hoge' >>> b = 0 >>> a and b 0 >>> b and a 0 >>> a or b 'hoge' >>> b or a 'hoge' >>> b = 'foo' >>> a and b 'foo' >>> b and a 'hoge' >>> a or b 'hoge' >>> b or a 'foo'
if 文などで普通に条件式として使うときは特に問題ないのですが、真偽値が欲しいときは注意しましょう。
三項演算子の書きかたが違う
Python2.5 から三項演算子が使えるようになりました。
でも、書き方が少し特殊です。
>>> a = True >>> 'foo' if a else 'bar' 'foo' >>> a = False >>> 'foo' if a else 'bar' 'bar'
わかりやすいように同じ処理を Ruby で書くと
irb(main):002:0> a=true => true irb(main):003:0> a ? 'foo':'bar' => "foo" irb(main):004:0> a=false => false irb(main):005:0> a ? 'foo':'bar' => "bar"
こうなります。
ちなみに三項演算子のおかげで、上記に書いた and や or で真偽値が欲しいときも簡潔に書けます。
各方面から「それ bool() で出来るよ」と突っ込みをいただきました。ありがとうございます!
>>> bool(a and b) False
>>> a = 0 >>> b = 'hoge' >>> True if a and b else False False >>> True if a or b else False True
for 文で回数指定
js で書くと
for(var i ; i < 10 ; i++ ){ alert(i); }
Ruby で書くと
irb(main):011:0> 10.times{|a| irb(main):012:1* p a irb(main):013:1> } 0 1 2 3 4 5 6 7 8 9 => 10 irb(main):014:0>
Python は基本的にデータ構造をループさせる事しか出来ないので
range 関数でリストを生成してループさせます。
>>> for i in range(0,10): ... print i ... 0 1 2 3 4 5 6 7 8 9 >>>
とりあえずここまで……
こんな感じです><
僕が個人的に嵌っただけなので
「別に普通じゃん」ってところがあるかもしれません><
突っ込みおまちしています