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 |