Pythonの(デザイナーではなく)ユーザーとして、この決定に満足している3つの理由があります。
主に、それはよりよく読みます。もちろん、私はを書くときに意識的に新しい変数を導入することを決めなければなりませんが、コードは書かれているよりもはるかに頻繁に読み取られます。制御フローとネストが変数の意味と存在に影響を与えないという意味で、多くのコードは単純です。私が読んだとき
it = Snark()
message = "A letter, not signed"
if random.random() > 0.5:
hunt(it)
message += " (by the Knave)"
return [it, message]
それから、私は通常、名前のどの(もしあれば)言及が最初にそれを導入するかを本当に気にしません、それがそこにあることとそれがどうなるかを気にします。
擬似コードの重要な本体は同じ規則(宣言なし、代入による暗黙の導入)を使用していることに注意してください。Pythonは、冗談でありながら、実行可能な擬似コードとして記述されることがよくあります。すべてのローカル変数の4つの追加文字は、Pythonのコンテキストでは、特に値を追加するように感じられない場合(以下を参照)は、乱雑な目にはかなり混乱しているように感じます。これは:=
、Goの場合と同様に、オペレーターによって軽減されます。
第二に、私はまだ(この特定の機能のために)タイプミスのバグに遭遇していませんが、別の明確な方法でそれ自体を表示しませんでした。たぶん、この種のバグに遭遇した数年後には気が変わってしまうかもしれませんが、これまでのところ、バグの原因となるもののリストからはかなり下がっています。かなりの数の質問UnboundLocalError
があり、初心者に説明するのは少しトリッキーですが、それらの質問の頻度と人気は、他の問題(可変デフォルトパラメーター、参照セマンティクス、クラス変数とインスタンス変数)と比較して、それがまれな問題であることを示しています。
最後に、意図したこと...申し訳ありませんが、これは本当に理解できません。Pythonを読み書きするとき、それは常に完全に明確です:割り当てられたものは、大声で明示的に宣言されていない限り、ローカルとして意図されています。それについての質問はありません。さらに、(少なくともPythonでは)変数は関数全体に対してローカルであるか、まったくそうでないため、あるブランチでローカル変数を使用し、別のブランチでグローバル変数を使用するトリッキーなコードを作成することはできません。名前が割り当てられているのがわかりますか?あなたはそれが最初から常にローカルであったことを即座に知っています。まあ、コードが非常に特別な方法で破壊されない限り(そしてUnboundLocalError
、それらのケースに入るときに実行時に恐怖を投げます)。