Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 函数中的globals()作用域_Python_Global Variables_Globals - Fatal编程技术网

Python 函数中的globals()作用域

Python 函数中的globals()作用域,python,global-variables,globals,Python,Global Variables,Globals,我有一个关于python中globals()的问题 我的示例代码 b=9 def a1(): 'kkk' a1() print globals() 我得到的输出b是全局的 因为b是全局的,我希望我可以在任何地方修改它 所以我修改了我的代码 b=9 def a1(): 'kkk' b=100 a1() print globals() 还是我的globals()说b等于100。为什么函数中的b作为局部值,而my globals()表示其全局值 注意:如果我在函数中添加关键字global

我有一个关于python中globals()的问题

我的示例代码

b=9
def a1():
 'kkk'

a1()
print globals()
我得到的输出b是全局的

因为b是全局的,我希望我可以在任何地方修改它 所以我修改了我的代码

b=9
def a1():
 'kkk'
 b=100
a1()
print globals()
还是我的globals()说b等于100。为什么函数中的b作为局部值,而my globals()表示其全局值

注意:如果我在函数中添加关键字global b,它将转换为global。
我的问题是为什么b没有在函数中被修改,而globals()将b声明为全局变量?

在函数中,除非使用关键字global,否则被修改的不是全局变量。相反,局部变量在函数内部超出范围时会被创建和销毁,除非使用关键字global,否则修改的不是全局变量。相反,将创建一个局部变量,并在其超出范围时立即将其销毁。有关详细信息,请参阅。复制文本以防URL不起作用

在Python中,仅在函数内部引用的变量是隐式全局变量。如果在函数体中的任何位置为变量赋值,则假定该变量为局部变量,除非显式声明为全局变量

虽然一开始有点令人惊讶,但经过片刻的考虑就可以解释这一点。一方面,为指定的变量要求全局变量提供了防止意外副作用的屏障。另一方面,如果所有全局引用都需要global,那么您将一直使用global。您必须将对内置函数或导入模块组件的每个引用声明为全局引用。这种混乱将破坏《全球宣言》在确定副作用方面的作用

有关更多信息,请参阅。复制文本以防URL不起作用

在Python中,仅在函数内部引用的变量是隐式全局变量。如果在函数体中的任何位置为变量赋值,则假定该变量为局部变量,除非显式声明为全局变量

虽然一开始有点令人惊讶,但经过片刻的考虑就可以解释这一点。一方面,为指定的变量要求全局变量提供了防止意外副作用的屏障。另一方面,如果所有全局引用都需要global,那么您将一直使用global。您必须将对内置函数或导入模块组件的每个引用声明为全局引用。这种混乱将破坏《全球宣言》在确定副作用方面的作用


由于您的代码
b
是a1()中的局部变量,要使用全局变量,您应该首先对python说,然后使用它,如下所示:

b=9
def a1():
 'kkk'
 global b
 b=100

a1()
print globals()

由于您的代码
b
是a1()中的局部变量,要使用全局变量,您应该首先对python说,然后使用它,如下所示:

b=9
def a1():
 'kkk'
 global b
 b=100

a1()
print globals()

我的问题是为什么python将b报告为全局的,即使我在函数中没有使用关键字“global”?您定义了“b”global,这意味着它不属于任何函数或类,使用global关键字并不定义全局,它标记了要使用的函数中以前定义的全局变量。我的问题是,为什么python报告b为全局变量,即使我在函数中没有使用关键字“global”?您定义了“b”global,这意味着它不属于任何函数或类,使用global关键字不会定义全局变量,它标记要使用的函数中以前定义的全局变量您的问题不是直接关于该错误,但实际上是相同的:为什么在函数局部中分配变量?您的问题不是直接关于该错误,但实际上是相同的:为什么在函数局部中分配变量?