2017-05-29 11 views
2

Pythonのチュートリアルでは、(https://docs.python.org/3/tutorial/classes.html#python-scopes-and-namespacesPythonローカル変数は静的に決定されていますか?

In fact, local variables are already determined statically.

これを理解するためにどのようにと言っていますか?私が知っていたことに基づいて、の静的は、変数のタイプがコンパイル時に決定されることを意味します。たとえば、変数xが実行時にint型またはstring型のオブジェクトに動的にバインドされているとします。

参考:Is Python strongly typed?

+2

'Python'に変数はありません。名前とオブジェクトだけです。 –

+0

[この素晴らしい投稿](https://nedbatchelder.com/text/names.html)は、何が起こっているのかを説明します。 –

+1

@AzatIbrakov :その投稿から: "神話:Pythonには変数はありません。"変数は、名前を使用するためにC変数のように動作する必要はありません。あなたは "名前"の名前を好むかもしれませんが、Pythonに変数がないと言っても間違っています。 – user2357112

答えて

2

他の回答に加えて、次のコードによって生成されるエラーを考慮してください。

x = 1 

def function(): 
    y = x + 1 
    x = 3 

function() 

これは「UnboundLocalError:ローカル変数 『x』は割り当て前に参照」のようなエラーが生成され、xグローバルを否定するので、それはローカルスコープに見出さなければならないfunction内のローカル変数であると判断されたため定義。

+0

興味深いコードスニペット。私は同じスコープで名前の衝突からエラーが発生すると思います。 'x = x + 1'では、lhs xは新しいローカル変数xをこのローカルスコープで作成させます。その結果、rls xはグローバルスコープまで検索する代わりに、このローカルxを参照します。 –

+0

@swang割り当てなしで 'x + 1'だけ試してください –

2

彼ら存在、および変数の参照がローカルかグローバルか、コンパイル時に決定されます。

関連する問題