关于Python:Python – 在函数中访问全局列表

Python - access global list in function

本问题已经有最佳答案,请猛点这里访问。

我是Python的新手,在这之前,我使用的是C。

1
2
3
4
5
6
7
8
9
def cmplist(list): #Actually this function calls from another function
    if (len(list) > len(globlist)):
        globlist = list[:] #copy all element of list to globlist

# main
globlist = [1, 2, 3]
lst = [1, 2, 3, 4]
cmplist(lst)
print globlist

当我执行此代码时,它显示以下错误

1
2
    if (len(list) > len(globlist)):
NameError: global name 'globlist' is not defined

我希望从函数访问和修改globalist,而不将其作为参数传递。在这种情况下,输出应该是

1
[1, 2, 3, 4]

有人能帮我找到解决办法吗?

欢迎提出任何建议和更正。事先谢谢。

编辑:感谢Martijn Pieters的建议。原始错误为

1
UnboundLocalError: local variable 'globlist' referenced before assignment


你可以做到:

1
2
3
4
def cmplist(list): #Actually this function calls from another function
    global globlist
    if (len(list) > len(globlist)):
        globlist = list[:] #copy all element of list to globlist

不过,通过这种方式传递和修改可能会更像Python。


在函数cmplist内,对象"globalist"不被视为来自全局范围。python解释器将其视为局部变量;在函数cmplist中找不到其定义。因此出现了错误。在函数内部,在第一次使用globalList之前将其声明为"global"。类似这样的事情会奏效:

1
2
3
def cmplist(list):
     global globlist
     ... # Further references to globlist

HTH斯旺德


您需要在函数中将其声明为全局:

1
2
3
4
5
6
7
8
9
10
def cmplist(list): #Actually this function calls from another function
    global globlist
    if len(list) > len(globlist):
        globlist = list[:] #copy all element of list to globlist

# main
globlist = [1, 2, 3]
lst = [1, 2, 3, 4]
cmplist(lst)
print globlist