繁体   English   中英

声明全局变量

[英]Declaring global variables

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

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

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

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

NameError:全局名称'列'未定义

您没有正确使用global 你并不需要在所有使用它。

您实际上需要设置一个全局column变量,现在没有。 global不使变量可用。 只需首先创建一个全局column

column = []

然后在您的函数中引用它。 那就是NameError异常试图告诉您的; Python无法找到全局column变量,您没有为该名称分配任何内容,因此该名称不存在。

仅在要分配函数中的全局column时才需要使用global

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 = []

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

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

我认为,如果要显示global功能,则将数据分配给column会更有趣(因为如果不分配任何内容,则可以使用非本地列而不使用全局声明)

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM