Pythonの「定数」って、なんだか妙じゃない?仕様の違和感を徹底検証
Python's pre-declared constants are kinda weird
Python's pre-declared constants are kinda weird
Pythonにおける事前の定数宣言(pre-declared constants)について、皆さんはどう感じていますか?正直なところ、他の言語と比べても少し独特で違和感がありますよね。この挙動や設計の不思議さについて、皆さんの意見を聞かせてください。
「...」って、TrueやFalse、Noneと同じような扱いってこと?つまり、パース中にハードコードされた値に解決されるレキシカルトークンみたいな。
過去の関連スレ: https://news.ycombinator.com/item?id=49284392 (自分のコメントあり) と https://news.ycombinator.com/item?id=49250370 。今回注目されてて嬉しいよ。
2010年代のPythonは、PHPやPerlと比べて新鮮な感じがして好きだったな。今のPythonは、自分自身が変なPHPになったような感じで、遅いし壊れやすいし、大規模開発には危険すぎる。ルーズな型付け、雑多な標準ライブラリ、それに最悪なパッケージ管理(コミュニティがパッケージングの作法を全然わかってない)とか、全部時代遅れに感じる。
__debug__定数ってマジで変だよな。if __debug__:で囲ったコードブロックは、PYTHONOPTIMIZE=1だとバイトコードから丸ごと削除されるんだ。これとassertが、Pythonにおける「条件付きコンパイル」の数少ない例だよ。だからこそ__debug__には代入できないようになってる。代入できたらif __debug__:文に対するコンパイラの前提が崩れちゃうからね。
数年前にPython用の定数ライブラリを作ったんだけど、自分のアイデアがどれか採用されてないか気になるな。https://github.com/nucypher/constantSorrow/blob/master/tests/test_the_whole_story.py
Pythonの初期バージョンにはTrueとFalseが組み込まれてなくて、みんな自分で True = 1, False = 0 みたいに実装してたのを思い出したよ。その後言語に追加されたんだけど、Python 2ではまだ再代入で入れ替えができたから、if Falseが真になるなんてこともあったんだよね。True, False = False, True みたいに。Python 3からは再代入できなくなったけど。
わあ、Pythonの内部実装でどういう仕組みになってるのか詳しく知りたいな!
個人的な意見だけど、Pythonって正直人生で使った中で最悪の言語とエコシステムの一つだよ。昔JSが叩かれてたけど、Pythonはその数倍ひどいと思う。あくまで個人の感想だから怒らないでね xD
Pythonって、トレンチコートを着た3つのスクリプト言語みたいなものだろ。
Pythonは最悪。ライブラリごとに場当たり的な設計が多いし、スタイルも統一されてないし、遅いし、間違ったコードを簡単に書けてしまう。データサイエンティストのJupyter Notebookを本番環境向けに直す作業をよくやるんだけど、これがもう効率最悪の地獄なんだ。研究とかメモ書きには学習コストが低くていいんだろうけどね。