我是 python 的新手,所以我遇到了无法找到以下问题的答案的情况。
这在python中意味着什么?
l[:] = process_list(l)
l
是类型list
基本上我有一个全局声明列表,我想根据 process_list 方法的响应来修改它(用新值覆盖旧值)。当我这样尝试时:
l = process_list(l)
我明白了:Unresolved reference 'l'
你能解释一下有什么区别吗?如果我目前使用的第一种方法是一个好的方法?
我是 python 的新手,所以我遇到了无法找到以下问题的答案的情况。
这在python中意味着什么?
l[:] = process_list(l)
l
是类型list
基本上我有一个全局声明列表,我想根据 process_list 方法的响应来修改它(用新值覆盖旧值)。当我这样尝试时:
l = process_list(l)
我明白了:Unresolved reference 'l'
你能解释一下有什么区别吗?如果我目前使用的第一种方法是一个好的方法?
在函数中,对可能是局部变量的名称的赋值会通过该名称创建一个局部变量,即使它隐藏了一个全局变量:
a = None
def foo():
a = 5 # local 'a' shadows global 'a'
切片赋值是修改,不是赋值,所以名称继续指全局:
a = [1, 2, 3]
def foo():
a[:] = [5] # modifies global 'a'
发生这种Unresolved reference
情况是因为通过创建一个遮蔽全局的局部变量,不再可以看到全局。做你想做的另一种方法可能是使用global
:
a = None
def foo():
global a
a = 5 # rebinds global 'a'
list[:] = whatever
将更改现有列表的内容
(而不是将其替换为list = whatever
)...顺便说一句,这list
是一个可怕的变量名...