无需全局关键字即可访问全局变量
在 Python 中,全局变量与局部变量存储在单独的命名空间中。要访问函数内的全局变量,通常使用 global 关键字。但是,在某些情况下,无需显式声明全局变量即可被访问。
考虑以下代码:
sub = ['0', '0', '0', '0'] def getJoin(): return '.'.join(sub) getJoin()
在此代码中,getJoin 函数返回连接的元素子列表的,它是一个全局变量。令人惊讶的是,该函数无需使用全局关键字即可访问 sub。
为什么会发生这种情况?
动态作用域
Python 使用动态作用域,这意味着在当前作用域中搜索变量,然后在封闭的作用域中搜索变量,直到找到为止。在getJoin函数中,本地没有找到变量sub。因此,它会搜索封闭范围(即全局范围),并找到其中的子变量。
变量绑定
当访问变量时,它会被绑定到一个内存位置。在 sub 的情况下,它绑定到包含“0”列表的内存位置。当解释器遇到赋值语句 sub = ['0', '0', '0', '0'].
函数访问
当调用getJoin函数时,它会执行并且解释器会搜索它需要的变量。由于 sub 在本地未找到,因此它会在封闭范围中查找并找到已绑定的 sub 变量。然后该函数访问存储在该内存位置的数据,其中包含“0”列表。全局关键字
当您想要修改时,全局关键字很有用或在本地上下文中创建全局变量。但是,如果全局变量已经绑定到封闭范围内的内存位置,则并不严格要求访问全局变量。以上是Python 函数如何在没有'global”关键字的情况下访问全局变量?的详细内容。更多信息请关注PHP中文网其他相关文章!