声明全局变量

时间:2013-06-07 14:44:32

标签: python global-variables

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

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

    global column
    
    def fx_foo(cols):
        common = set(cols).intersection(set(column)) #Error Here!!
    
  3. 当我尝试访问函数内的列时,出现错误:

      

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

4 个答案:

答案 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)

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

如果只需要访问变量,函数就不需要将变量声明为全局变量。全局声明就是您需要修改全局变量。

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