akasaka_34の日記

ネトウヨと呼ばれた男の日記。しかし頻度から言えば週報ぐらい。

Pythonに関する的外れな支持

Pythonで、ある関数の戻り値が真になるまでその関数を呼びつづけるとき、どう書く?

while not foo():
pass
って書いてもいいけど
while True:
if foo():
break
の方がPythonらしい書き方のような気がする。
(僕がここでいう「Pythonらしさ」は、少し曖昧だけど
アルゴリズムの教科書に出てきそうな感じのこと。異論はあると思う)

Pythonにおけるオフサイドルールについて
「簡潔だ(必要な行数が少ない)から良い」
という人が居るけど、どうもそれはPythonの目指すものとは違うんじゃないかなと思う。

なぜ空ブロックを許さないのか?なぜpassが必要なのか?
それはオフサイドルールによって必然的に決まっている訳じゃない。
Pythonの言語仕様が空ブロックを許すなら以下のコードは問題ない。

while not foo():
print 'hello'
あるいは
if bar():
while not foo():
print 'hello'
空ブロックを認めると構文解析が破綻するとかじゃない。
簡潔さ犠牲にして、あえてpassを言語仕様に盛り込んだんだ。
一行短くするためにオフサイドルールを採用したとは思えない。

なんかPythonに関しては「的外れな支持者」も少なくない気がする。