Pythonが変数の宣言と使用を区別できないことは嫌いです。それを実現するために静的型付けは必要ありません。「これは、私が意図的に宣言する変数であり、新しい名前を導入するつもりです。これはタイプミスではありません」と言う方法があると便利です。
さらに、私は通常、Python変数をライトワンススタイルで使用します。つまり、変数を不変として扱い、最初の割り当て後に変数を変更しません。リストの理解などの機能のおかげで、これは実際には非常に簡単であり、コードの流れを理解しやすくします。
ただし、その事実を文書化することはできません。Pythonには、フォームの上書きや変数の再利用を妨げるものは何もありません。
要約すると、言語に2つのキーワードがあります:var
とlet
。どちらにも宣言されていない変数に書き込みを行うと、Pythonはエラーを発生させるはずです。さらに、let
変数は読み取り専用として宣言しvar
ますが、変数は「通常」です。
この例を考えてみましょう:
x = 42 # Error: Variable `x` undeclared
var x = 1 # OK: Declares `x` and assigns a value.
x = 42 # OK: `x` is declared and mutable.
var x = 2 # Error: Redeclaration of existing variable `x`
let y # Error: Declaration of read-only variable `y` without value
let y = 5 # OK: Declares `y` as read-only and assigns a value.
y = 23 # Error: Variable `y` is read-only
型はまだ暗黙的であることに注意してください(ただし、let
変数は新しい値に再バインドできないため、変数はすべての意図と目的のために静的に型付けされますが、var
変数は動的に型付けされます)。
最後に、すべてのメソッド引数は自動的にになりますlet
。つまり、読み取り専用になります。一般的に、次のイディオムを除き、パラメーターを変更する正当な理由はありません。
def foo(bar = None):
if bar == None: bar = [1, 2, 3]
これは、わずかに異なるイディオムに置き換えることができます。
def foo(bar = None):
let mybar = bar or [1, 2, 3]