2017-05-29 70 views
2

Python的教程中说,(https://docs.python.org/3/tutorial/classes.html#python-scopes-and-namespaces静态确定Python局部变量?

In fact, local variables are already determined statically.

如何理解?基于我所知道的静态意味着变量的类型是在编译时确定的。但它不是真的考虑例如

x = 1 
x = 'str' 

其中变量x在运行时动态绑定到int或字符串类型的对象。

参考: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’”,因为它确定xfunction一个局部变量,所以应该在局部范围内被发现,抵消了全球定义。

+0

有趣的代码片段。我认为这个错误来自同一范围内的名称冲突。在'x = x + 1'中,lhs x会在本地范围中创建一个新的局部变量x。结果,rls x会引用这个本地x,而不是一直搜索到全局范围。 –

+0

@swang然后只用'x + 1'试一下 –

2

他们存在和变量查找是局部的还是全局的,是在编译时确定的。