为什么Python让我在一个范围内定义变量,但在另一个范围内使用它?

Ste*_*oss 7 python

我看到可以在范围内定义一个变量,但是然后在该范围之外引用它.例如,以下代码有效:

if condition:
    x = 5
else:
    x = 10
print x
Run Code Online (Sandbox Code Playgroud)

然而,这让我觉得有些奇怪.如果您尝试在C中执行此操作,则变量X将无法正确确定范围:

if(condition) { int x = 5; }
else { int x = 10; }
print x; // Doesn't work: x is unavailable!
Run Code Online (Sandbox Code Playgroud)

无论如何,在C中的解决方案是首先声明X,然后找出它的作用:

int x;
if(condition) { x = 5; }
else { x = 10; }
print x; // Works!
Run Code Online (Sandbox Code Playgroud)

所以,在Python中,我的直觉就是编写如下代码:

x = None
if condition:
    x = 5
else:
    x = 10
print x
Run Code Online (Sandbox Code Playgroud)

但是,我意识到Python并不要求我这样做.有什么建议?这种情况是否有样式指南?

Ign*_*ams 17

块不会在Python中创建新范围.模块,类和函数都可以.

也:

x = 10
if condition:
    x = 5
print x
Run Code Online (Sandbox Code Playgroud)

要么:

x = 5
if not condition:
    x = 10
print x
Run Code Online (Sandbox Code Playgroud)

  • 这是[此处](http://docs.python.org/tutorial/classes.html#python-scopes-and-namespaces)的文档. (2认同)
  • 为了完整起见:还有生成器表达式,lambda表达式,以及在Python 3列表推导中,创建新的范围. (2认同)

orl*_*rlp 5

我的建议:

写Python,而不是C.

在Python中我们使用块.An if是一个块.块不一定意味着Python中的不同范围.