python传递列表作为函数参数

Posted

技术标签:

【中文标题】python传递列表作为函数参数【英文标题】:python pass list as function parameter 【发布时间】:2012-04-03 16:23:27 【问题描述】:

各位,

下面代码的结果是[] 为什么不是 ['0','1','2']?如果我想让函数foo中的psswd等于数字,我该怎么办?

number = ['0','1','2']
def foo(psswd):
    psswd = number[:]

if __name__ == '__main__':
    psswd = []
    foo(psswd)
    print psswd

【问题讨论】:

【参考方案1】:

您需要使用slice-assigning 进行变异而不是重新绑定。

psswd[:] = number[:]

【讨论】:

【参考方案2】:
number = ['0','1','2']
def foo(psswd):
    psswd[:] = number  # swap the slice around here

if __name__ == '__main__':
    psswd = []
    foo(psswd)
    print psswd

【讨论】:

【参考方案3】:

您的代码:

number = ['0','1','2']
def foo(psswd):
    psswd = number[:]

if __name__ == '__main__':
    psswd = []
    foo(psswd)
    print psswd

psswd = number[:] 用新列表重新绑定局部变量 psswd

即,当您执行foo(psswd) 时,会调用函数foo,并在其中创建局部变量passwd,该变量指向同名的全局列表。

当您在foo 函数中执行psswd = <something> 时,会创建/获取此<something> 并让本地名称psswd 指向它。全局变量psswd 仍然指向旧值。

如果你想改变对象本身,而不是本地名称,你必须使用这个对象的方法。 psswd[:] = <smething>实际上调用了psswd.__setitem__方法,从而修改了本地名称psswd引用的对象。

【讨论】:

以上是关于python传递列表作为函数参数的主要内容,如果未能解决你的问题,请参考以下文章

python:传递字符串而不是文件作为函数参数

Python将列表作为参数传递

如何将列表的所有元素作为函数的参数传递而不将列表作为参数传递

python怎么传参

python如何将可选参数或关键字参数从一个函数传递到另一个函数?

Python将ref int作为参数传递