【问题标题】:What does list[:] = process_list(list) does in python? [duplicate]list[:] = process_list(list) 在 python 中做了什么? [复制]
【发布时间】:2012-11-28 03:47:52
【问题描述】:

可能重复:
What is the difference between list and list[:] in python?

我是python的新手,所以我遇到了无法找到以下问题的答案的情况。

这在 python 中是什么意思?

l[:] = process_list(l)

llist 类型

基本上我有一个全局声明列表,我想根据 process_list 方法的响应来修改它(用新值覆盖旧值)。当我这样尝试时:

l = process_list(l)

我明白了:Unresolved reference 'l'

您能否解释一下有什么区别以及我目前使用的第一种方法是否好?

【问题讨论】:

  • 真的叫list吗? list 是一个内置类型,你不应该调用变量“list”
  • @DiegoBasch: no 不叫“list”,但我想让它简单明了,我忘了 python 有这个内置类型。

标签: python python-2.7


【解决方案1】:

list[:] = whatever 将改变现有列表的内容

(而不是用list = whatever 替换它)...顺便说一下list 是一个糟糕的变量名...

【讨论】:

  • 你的名字是对的,但在我的代码中不是这样的。我忘了python有这个内置类型。
【解决方案2】:

在函数中,对可能是局部变量的名称的赋值会通过该名称创建一个局部变量,即使它会影响全局变量:

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'

【讨论】:

  • 非常感谢您提供如此清晰简单的解释!
  • 你能帮我做点什么吗?我正在尝试为该列表(全局声明)分配一个字典。直到程序中的某个点我将它用作列表,但现在我想要它作为字典。最好的方法应该是什么?谢谢!
  • @andreea.sandu 使用global a,然后你可以写a = {}
猜你喜欢
  • 2020-08-20
  • 2015-05-29
  • 2015-12-03
  • 2022-12-17
  • 1970-01-01
  • 1970-01-01
  • 2021-11-26
  • 2017-04-19
  • 2019-02-02
相关资源
最近更新 更多