我有2个关于全局变量的问题:
global list_ex = []
?我已经定义了一个我试图在函数中使用的全局变量,但不能:
global column
def fx_foo(cols):
common = set(cols).intersection(set(column)) #Error Here!!
当我尝试访问函数内的列时,出现错误:
NameError:未定义全局名称“列”
答案 0 :(得分:8)
您没有正确使用global
。您根本不需要使用 。
您需要实际设置全局column
变量,现在没有。 global
不会使变量可用。首先创建全局column
:
column = []
然后在你的函数中引用它。这就是NameError
例外试图告诉你的内容; Python无法找到全局column
变量,您没有为名称指定任何内容,因此它不存在。
如果您希望将分配给功能中的全局global
,则只需使用column
:
def somefunction():
global column
column = [1, 2, 3]
此处需要global
关键字来区分column
与函数中的 local 变量。
比较
>>> foo = 1
>>> def set_foo():
... foo = 2
...
>>> set_foo()
>>> foo
1
到
>>> foo = 1
>>> def set_foo():
... global foo
... foo = 2
...
>>> set_foo()
>>> foo
2
第一种形式只设置局部变量,第二种形式设置全局变量。
答案 1 :(得分:1)
关键字global表示您明确使用在函数范围之外声明的变量。
您的变量必须正常声明:
column = []
并在使用它的函数中声明为global
def fx_foo(cols):
global column
common = set(cols).intersection(set(column))
它用于允许python区分新的局部变量和重用的全局变量。
答案 2 :(得分:1)
这将有效:
column =[]
def fx_foo(cols):
global column
common = set(cols).intersection(set(column))
但即使没有global
,这也会有用,因为column
将被视为非本地
column =[]
def fx_foo(cols):
common = set(cols).intersection(set(column))
我认为如果要显示column
功能,将数据分配给global
会更有意思(因为如果不为其分配任何内容,可以使用非全局声明的列,而不使用全局声明)
column =[]
def fx_foo(cols):
global column
column = set(cols).intersection(set(column))
或
def fx_foo(cols):
column =[]
global column
column = set(cols).intersection(set(column))
答案 3 :(得分:0)
全局变量需要在函数内部声明为全局变量而不是外部变量。在函数外声明的变量默认为全局变量。
如果只需要访问变量,函数就不需要将变量声明为全局变量。全局声明就是您需要修改全局变量。
因此,在您的情况下,我建议您在将函数传递给函数时查看实际的列,因为我认为问题可能与此有关。