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传递列表作为函数参数的主要内容,如果未能解决你的问题,请参考以下文章
如何将列表的所有元素作为函数的参数传递而不将列表作为参数传递