我看到在作用域内定义变量是可能的,但是在该作用域之外引用它。例如,下面的代码可以工作:
if condition:
x = 5
else:
x = 10
print x然而,这让我觉得有点奇怪。如果您尝试在C中执行此操作,变量X的作用域将不正确:
if(condition) { int x = 5; }
else { int x = 10; }
print x; // Doesn't work: x is unavailable!无论如何,在C中的解决方案是首先声明X,然后弄清楚如何处理它:
int x;
if(condition) { x = 5; }
else { x = 10; }
print x; // Works!因此,在Python中,我的直觉是编写如下代码:
x = None
if condition:
x = 5
else:
x = 10
print x然而,我意识到Python并不需要我这样做。有什么建议吗?这个场景有没有风格指南?
发布于 2011-03-17 04:00:17
块不会在Python中创建新的作用域。模块、类和函数可以。
另外:
x = 10
if condition:
x = 5
print x或者:
x = 5
if not condition:
x = 10
print x发布于 2011-03-17 04:00:13
我的建议是:
写Python,而不是C。
在Python中,我们使用块。if是一个块。在Python中,块并不一定意味着不同的作用域。
发布于 2011-03-17 04:05:41
在您的示例中,您可以尝试执行以下操作:
x = 10
if condiiton:
x = 5
print x至于为什么Python没有和C(以及C++和Java)一样的作用域规则,简单的回答是它们是不同的语言。长长的答案与效率有关。在C中,这些作用域规则都是在编译时处理的,没有运行时开销。在Python中,它必须在新的dict中存储一个内部作用域,这会增加开销。我相信还有其他原因,但这是一个很大的实际原因。
https://stackoverflow.com/questions/5331047
复制相似问题