Pythonはダメなところは信者がアレすぎるところ
まぁ、わからないでもないなぁ。
print 文がよけいな空白と改行を出力してしまう。
わかるなぁ。複数のオブジェクトを空白区切りなしで出力だとこんなのか。
print ''.join(map(str, [a, b, c]))
print ''.join(str(x) for x in [a, b, c])
print ('%s' * 3) % (a, b, c)
いやだこんなの。
まぁ、そもそも print なんて使うな派もいるというウワサをどこかで聞いたこともある。
ちなみに、コメントにある最後にカンマを追加する案はあまり解決になっていない。
list や dict や str が大文字で始まっていない。
これもわかるけど、正直あまり困らないなぁ。
built-in type のオブジェクトにプロパティが追加できない。
built-in type にメソッドが追加できない。
str#join() が文字列以外の要素があればエラーになる。
dict においてキーがないときに例外が発生する。
これは Python 的な哲学なんじゃないの、という気が。str.join とか自動的に変換してくれてもいいじゃんとか思うけどね、確かに。
super を使った親クラスのメソッド呼び出しがしにくい
dict をループするのに .iteritem() をつける必要がある。
同意すぎる。
関数のすぐ外側のスコープにある変数に代入できない。
Python 的にはそこまでいったら class を使えということかと。
変数のスコープの仕様がわかりにくい。
クラスの名前空間はクラス定義終了時点で破棄される、でいいんじゃね?
引数省略時のデフォルト式が定義時にしか評価されない
別にいいんじゃね?毎回式を評価されるのもアレ。
文字列に式が埋め込めない。
これはほかの言語も Ruby を参考にするべきだと思う。
Perl のは変数の直後に識別子に含めていい文字が来る場合にどうしていいかよくわからないのだよな。こんなん?
my $x = "a"; my $y = "$x\_b";
3 項演算子が書きにくくて読みづらい。
だから三項演算子という書き方は以下略。
まぁ、英語な人たちならなんてことないのでは。あまり使うなという話も。
あと、コメントの
x=="hoge" and "1" or "0"
は
x == "hoge" and 0 or 1
だと破綻するのでやめたほうがよい。
repr() が貧弱。
Python はメソッドも単なる属性なので属性を全部表示するとなるとちょっとアレ。まぁ、クラスにはない属性だけ表示という方法もあるだろうけど。
あと、pprint モジュールのことをたまには思い出してあげるとよい。