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
>>>

とりあえずここまで……

こんな感じです><
僕が個人的に嵌っただけなので
「別に普通じゃん」ってところがあるかもしれません><


突っ込みおまちしています