list
Python の予約語だったら防げたはずのバグに少しだけ気付きました。(確かに、私の側ではばかげています。)
では、なぜ list (または dict や float などの型) が予約語ではないのでしょうか? ルールを覚えようとするよりも、インタープリター エラーを追加する方が簡単なようです。
(また、Eclipse/PyDev には、このルールを思い出させる設定があることも知っています。これは便利です。)
list
Python の予約語だったら防げたはずのバグに少しだけ気付きました。(確かに、私の側ではばかげています。)
では、なぜ list (または dict や float などの型) が予約語ではないのでしょうか? ルールを覚えようとするよりも、インタープリター エラーを追加する方が簡単なようです。
(また、Eclipse/PyDev には、このルールを思い出させる設定があることも知っています。これは便利です。)
キーワードのみが予約されています。
list
str
、set
、dict
、unicode
、int
、float
などのように、キーワードではなく組み込み型です。
可能なすべての組み込み型を予約しても意味がありません。python は動的言語であり、組み込み型をシャドウするローカル名に置き換えたい場合は、できるはずです。
list
およびその他の型は、事前にインポートされたオブジェクト型のライブラリと考えてください。defaultdict
からも予約されるとは思いませんcollections
か?
このようなエラーをキャッチするには、静的コード アナライザーを使用します。ほとんどの IDE では、簡単に統合できます。
これを見てください:http://docs.python.org/2/reference/lexical_analysis.html#keywords
list
は単なる型であり、予約されていません (どちらもint
, float
, dict
, str
... ではありません)。
これはちょっとした意見の質問ですが、これが私の 2c です。
キーワードを予約済みにすることは重要です。基本的に、そのキーワードをコードで使用できないことを意味するため、リストを短くすることがプログラミング言語の設計として優れていると見なされることがよくあります。(perl はそうではありませんが、perl は他のほとんどのプログラミング言語とはまったく異なる哲学を持っており、変数の前に特殊記号を使用して衝突を防ごうとしています)。
とにかく、これが事実である理由を確認するには、前方互換性を検討してください。Python の開発者が、それarray
が非常に基本的な概念であると判断し、それをビルトインにしたいと考えていると想像してください (考えられないことではありません - これset
は、ええと、python 2.6 で起こりましたか?)。ビルトインが自動的に予約されている場合、以前array
に他の何かに使用したり (明示的に としてインポートした場合でもfrom superfastlist import array
)、独自に実装したりした (numpy
これを行った) 人は、コードが機能しないことに突然気付くでしょう。非常に怒っています。
(さらに言えばhelp
、が予約語にされたかどうかを検討してください-argparseを含む無数のライブラリhelp
がキーワード引数として使用されています)
おそらく、クラスにプライベート属性がないのと同じ理由です。これがPythonの精神です。