首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Python允许我在一个作用域中定义变量,而在另一个作用域中使用它?

为什么Python允许我在一个作用域中定义变量,而在另一个作用域中使用它?
EN

Stack Overflow用户
提问于 2011-03-17 03:58:41
回答 4查看 405关注 0票数 7

我看到在作用域内定义变量是可能的,但是在该作用域之外引用它。例如,下面的代码可以工作:

代码语言:javascript
复制
if condition:
    x = 5
else:
    x = 10
print x

然而,这让我觉得有点奇怪。如果您尝试在C中执行此操作,变量X的作用域将不正确:

代码语言:javascript
复制
if(condition) { int x = 5; }
else { int x = 10; }
print x; // Doesn't work: x is unavailable!

无论如何,在C中的解决方案是首先声明X,然后弄清楚如何处理它:

代码语言:javascript
复制
int x;
if(condition) { x = 5; }
else { x = 10; }
print x; // Works!

因此,在Python中,我的直觉是编写如下代码:

代码语言:javascript
复制
x = None
if condition:
    x = 5
else:
    x = 10
print x

然而,我意识到Python并不需要我这样做。有什么建议吗?这个场景有没有风格指南?

EN

回答 4

Stack Overflow用户

发布于 2011-03-17 04:00:17

块不会在Python中创建新的作用域。模块、类和函数可以。

另外:

代码语言:javascript
复制
x = 10
if condition:
    x = 5
print x

或者:

代码语言:javascript
复制
x = 5
if not condition:
    x = 10
print x
票数 17
EN

Stack Overflow用户

发布于 2011-03-17 04:00:13

我的建议是:

写Python,而不是C。

在Python中,我们使用块。if是一个块。在Python中,块并不一定意味着不同的作用域。

票数 5
EN

Stack Overflow用户

发布于 2011-03-17 04:05:41

在您的示例中,您可以尝试执行以下操作:

代码语言:javascript
复制
x = 10
if condiiton:
    x = 5
print x

至于为什么Python没有和C(以及C++和Java)一样的作用域规则,简单的回答是它们是不同的语言。长长的答案与效率有关。在C中,这些作用域规则都是在编译时处理的,没有运行时开销。在Python中,它必须在新的dict中存储一个内部作用域,这会增加开销。我相信还有其他原因,但这是一个很大的实际原因。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5331047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档