generated at
Pythonのここがうんち
Pythonのうんちなところをみんなで書きなぐるスレ。

全体的に単語の区切りが分かり辛い。区切り文字省きすぎだろ。
String#startswith
"start switch" だと思う人多数
os.path.isfile() Path.is_file() がある。
どっちかが deprecated とか?誰か詳しい人追記よろikngtty
os.path.isfile() は低レベルな操作、 Path.is_file() 高レベルな操作なので両方残ると思われるA_kirisaki
標準ライブラリ内の命名規則すら統一できてない。
logging モジュール内の諸々が LowerCamelCase https://docs.python.org/3/library/logging.html
Javaのlog4jとかってライブラリから持ってきたからそのままって話らしい
公式ドキュメントの読みづらさが異常
「f-strings の式部分でバックスラッシュを使えない」とかいうイミフ仕様。
python
print(f" a\n b\n {'c'}\n d") # Output: # a # b # c # d print(f" a\n b\n {'c\n'} d") # SyntaxError: f-string expression part cannot include a backslash
>Backslashes may not appear anywhere within expressions. Comments, using the '#' character, are not allowed inside an expression. https://www.python.org/dev/peps/pep-0498/
Python に詳しい人曰く、実装が大変だから禁止ということになったらしい。
Pythonトークナイザーパーザーはかなり素朴」とのこと。
>Simple is better than complex. This idea extends to the parser. Restricting Python's grammar to an LL(1) parser is a blessing, not a curse. It puts us in handcuffs that prevent us from going overboard and ending up with funky grammar rules like some other dynamic languages that will go unnamed, such as Perl. https://www.python.org/dev/peps/pep-3099/
実装のためならばインターフェースの綺麗さを捨てるのがPython流。ジョブズ激おこ案件。
for 文がスコープを作らない
JavaScript の var かよ
三項演算子が非直感的
true の場合の値と false の場合の値の位置が離れてるのやばい
リスト」が実質配列。嘘をつくな。
>To explain the List data type it's better to start with a little bit of theory, as the term List is often used in an improper way by information technology folks. For instance "Python Lists" are not what the name may suggest (Linked Lists), but rather Arrays (the same data type is called Array in Ruby actually). https://redis.io/topics/data-types-intro
タプル」が実質ただのイミュータブルシーケンス。
for 文でイテレートできる。
リストから tuple() で変換できる。
半開区間な random.randrange とは別に、全開区間な random.randint がある。( https://docs.python.org/3/library/random.html#random.randint ) deprecated にもなってない。全開区間なことにも気付かず間違って使ってしまう人多数。
非同期周りがクソらしいけどよく知らないので誰か書いて
これはスクリプト言語の宿命で GIL がかかっているためマルチプロセスがダルいA_kirisaki
Ruby とかも事情は実は同じ?A_kirisaki
thread の例外が thread の外で捕捉できない
fiber みたいな軽量スレッドがない
lambda が使いづらいみたいだけど詳しくないので誰か書いて
無名関数がlambdaキーワードをいちいち要求するのがうざい(感想) Raclett3
Pythonがいちいち式ではなく文を使うことを要求するのに、lambdaが書くことを許しているのは式のみなので、表現力に限度がある
yieldとtry-catchは使えないね
break も使えない
実行ファイルとして扱いたいときにしんどい
pyinstaller とか、色々あるけどどれも微妙
それはスクリプト言語はどれもそうA_kirisaki
Python はスクリプト言語なので、Python のうんちポイントとしても並べて良さそう
じゃあまとめて RubyPHPPerl あたりもそうなりますね
mruby「呼んだ?」
高階関数を組み合わせると、読みづらさがヤバい
python
l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] map(lambda x: x ** 2, filter(lambda x: x % 2 == 0, l))
map object とか filter object とか、よくわからない
private がない
list は append なのに、set は add
dict は update
組み込み関数が pathlib.Path を返さない
string で返すな

それ「明らか」じゃなくてあなたの感想ですよね?
bool が int のサブタイプなのキモい。C の負の遺産を継ぐな。ikngtty
Julia Integer の具象型なんだなこれがA_kirisaki
CはC99でちゃんと論理型を作った
だが実態は1ビットのオブジェクトで、算術演算もできちゃうし暗黙の型変換もできてしまう
「"リスト内包表記"と"ジェネレーター式"は違うからちゃんと区別しろ。」うるせえ。評価が先行か遅延かの違いだけじゃねてか。なんで全然違うものみたいな命名してんだよ。ikngtty
クラス変数 FooClass.bar に対し foo_instance.bar の形でアクセスできる。メタレベルの情報とオブジェクトレベルの情報をごっちゃにするのキモすぎ。ikngtty
Luaでも流石に出来ない。キモいのに同意。sarubo
リストのメソッド名が append , pop , popleft とか対称性が全然表現できてなくてキモい。ikngtty
Ruby: push <-> pop , unshift <-> shift
C++: push_front <-> pop_front , push_back <-> pop_back
エラーに怯えながらプログラムを書かなければならない 島村
それは型チェックを実行時にしか行わない言語全般A_kirisaki