我有两个关于全局变量的问题:
- 为什么我不能像这样将列表声明为全局变量:
global list_ex = []
? 我已经定义了一个要在函数中使用的全局变量,但不能:
global column def fx_foo(cols): common = set(cols).intersection(set(column)) #Error Here!!
当我尝试访问函数内的列时,出现错误:
NameError:未定义全局名称“列”
我有两个关于全局变量的问题:
global list_ex = []
?我已经定义了一个要在函数中使用的全局变量,但不能:
global column
def fx_foo(cols):
common = set(cols).intersection(set(column)) #Error Here!!
当我尝试访问函数内的列时,出现错误:
NameError:未定义全局名称“列”
你没有global
正确使用。你根本不需要使用它。
您需要实际设置一个全局column
变量,目前没有。global
不使变量可用。只需创建一个全局column
优先:
column = []
然后在你的函数中引用它。这就是NameError
异常试图告诉你的;Python 找不到全局column
变量,您没有为该名称分配任何内容,因此它不存在。
global
如果你想在你的函数中分配一个全局变量,你只需要使用:column
def somefunction():
global column
column = [1, 2, 3]
这里global
需要关键字来与函数中column
的局部变量区分开来。
相比:
>>> foo = 1
>>> def set_foo():
... foo = 2
...
>>> set_foo()
>>> foo
1
至
>>> foo = 1
>>> def set_foo():
... global foo
... foo = 2
...
>>> set_foo()
>>> foo
2
第一种形式只设置一个局部变量,第二种形式改为设置全局变量。
关键字 global 表示您正在显式使用在函数范围之外声明的变量。
您的变量必须正常声明:
column = []
并在使用它的函数中声明为全局的
def fx_foo(cols):
global column
common = set(cols).intersection(set(column))
它用于让python区分新的局部变量和重用的全局变量。
这将起作用:
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))
全局变量需要在函数内部而不是外部声明为全局的。默认情况下,在函数外部声明的变量是全局变量。
如果函数只需要访问它,则不需要将变量声明为全局变量。全局声明只是在您需要修改全局变量时使用。
因此,在您的情况下,我建议您在将其传递给函数时查看实际的列,因为我认为问题可能与此有关。