代码第一:
# CASE 01
def test1(x):
x += x
print x
l = [100]
test1(l)
print lCASE01输出:
[100, 100]
[100, 100]没关系!因为我(名单)是可变的。
然后,
# CASE 02
def test2(x):
x = x + x
print x
l = [100]
test2(l)
print lCASE02输出:
[100, 100]
[100]虽然差别仍然可以理解。在x = x + x方式中,最左边的x已经被创建/分配为一个新的。
但是为什么呢?
如果x += x和x = x + x在定义上是一样的,但是为什么他们有两个不同的成就呢?这两方面的细节是如何进行的?
谢谢!
发布于 2017-06-13 02:20:03
x += x在引擎盖下调用append,这会使原始变量发生变异。
x = x + x正在创建一个test2本地的新变量,并设置该值,这不会影响原始x
发布于 2017-06-13 02:20:05
我想你搞不懂2号案子到底在做什么。参数未被修改。不管它的名称是x,您为函数创建了一个新的局部变量。
所以你也可以这么做
def test2(l):
x = l + l
print x其中,l可能是函数外部的变量,但它不是相同的(从技术上讲,是的,它是参数)
顺便说一句,你也可以把列表相乘。
In [1]: [100, 200]*2
Out[1]: [100, 200, 100, 200]https://stackoverflow.com/questions/44511335
复制相似问题