1

我有两个关于全局变量的问题:

  1. 为什么我不能像这样将列表声明为全局变量:global list_ex = []
  2. 我已经定义了一个要在函数中使用的全局变量,但不能:

    global column
    
    def fx_foo(cols):
        common = set(cols).intersection(set(column)) #Error Here!!
    

当我尝试访问函数内的列时,出现错误:

NameError:未定义全局名称“列”

4

4 回答 4

8

你没有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

第一种形式只设置一个局部变量,第二种形式改为设置全局变量。

于 2013-06-07T14:53:45.593 回答
1

关键字 global 表示您正在显式使用在函数范围之外声明的变量。

您的变量必须正常声明:

column = []

并在使用它的函数中声明为全局的

def fx_foo(cols):
    global column
    common = set(cols).intersection(set(column))

它用于让python区分新的局部变量和重用的全局变量。

于 2013-06-07T14:49:41.377 回答
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)) 
于 2013-06-07T14:59:22.350 回答
0

全局变量需要在函数内部而不是外部声明为全局的。默认情况下,在函数外部声明的变量是全局变量。

如果函数只需要访问它,则不需要将变量声明为全局变量。全局声明只是在您需要修改全局变量时使用。

因此,在您的情况下,我建议您在将其传递给函数时查看实际的列,因为我认为问题可能与此有关。

于 2013-06-07T14:52:59.920 回答