繁体   English   中英

python传递列表作为函数参数

[英]python pass list as function parameter

乡亲,

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

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

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

您需要使用切片分配进行变异而不是重新绑定。

psswd[:] = number[:]
number = ['0','1','2']
def foo(psswd):
    psswd[:] = number  # swap the slice around here

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

你的代码:

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引用的对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM