当前位置: 首页 > 面试题库 >

Python:为什么只在分配时需要全局,而在读取时却不需要全局?

丌官翰采
2023-03-14
问题内容

如果函数需要修改在全局范围内声明的变量,则需要使用全局声明。但是,如果函数只需要读取全局变量,则可以不使用全局声明而这样做:

X = 10
def foo():
    global X
    X = 20 # Needs global declaration
def bar():
    print( X ) # Does not need global

我的问题是关于Python的设计的:为什么Python被设计为允许在不使用全局声明的情况下读取全局变量?也就是说,为什么只强制分配具有全局性,为什么不强制全局读取呢?(这将使它变得均匀而优雅。)

注意:我可以看到在读取时没有歧义,但是在分配时并不清楚是否打算创建新的局部变量或分配给全局变量。但是,我希望BDFL对于这种不均衡的设计选择有更好的理由或意图。


问题答案:

看下面的代码:

from module import function

def foo(x):
    return function(x)

function这里的名字是全球性的。如果我不得不说global function要使此代码正常工作,那将变得非常乏味。

在您说yourX和myfunction不同(因为一个是变量,另一个是导入的函数)之前,请记住,Python中的所有名称都被视为相同:使用时,它们的值在作用域层次结构中查找。如果需要,global X那么就需要global function。ck



 类似资料:
  • 问题内容: 我对JAX-WS进行了概述,并注意到了(和)的一些引用。 在什么情况下需要?(我认为JSR 109服务器?!) 问题答案: 是使用SUN的参考实现将Web服务作为标准存档部署在非Java EE5 Servlet容器上时所需的专有部署描述符。 Sun的RI 用作servlet上下文事件的侦听器和调度程序servlet。两者都必须在中声明。然后需要该文件为定义Web服务端点,以使其知道必须

  • 如果我在我的类中创建一个bool,就像一样,它默认为false。 当我在我的方法中创建相同的bool时,我得到一个错误“使用未分配的局部变量检查”。为什么?

  • 我一直在寻找答案,但我没有找到它,我需要在我继续我的测试之前弄明白。 我正在通过安装bash创建一个基于Alpine的映像,如下图所示: Hello.sh 我可以在不向docker-compose.yml添加的情况下访问,所以Alpine的映像中一定有我不理解和希望理解的东西。

  • 本文向大家介绍HTML5 为什么只需要写 ?相关面试题,主要包含被问及HTML5 为什么只需要写 ?时的应答技巧和注意事项,需要的朋友参考一下 1) HTML5不基于SGML,因此不需要对DTD进行引用,但是需要DOCTYPE来规范浏览器的行为(让浏览器按照他们应该的方式来运行); 2) HTML4.01基于SGML,所以需要对DTD进行引用,才能告知浏览器文档所使用的文档类型;