我学习编程语言,一个测验问题和解决方案是这样的:
def foo(x):
x.append (3)
x = [8]
return x
x=[1, 5]
y= foo(x)
print x
print y
Run Code Online (Sandbox Code Playgroud)
为什么打印如下:
[1 5 3 ]
[8]
Run Code Online (Sandbox Code Playgroud)
为什么 x 不等于 8 ?
小智 5
你那里发生了很多事情。那么让我们一步一步来。
x = [1,5] 您正在将 1,5 的列表分配给 x
y=foo(x)您正在调用 foo 并传入 x 并分配从 foo 返回的任何内容
foo在你调用的内部x.append(3)将 3 附加到传入的列表中。
然后设置x = [8]它现在是对局部变量 x 的引用,然后从 foo 最终设置返回y = [8]
其他两个答案很好。我建议你尝试id获取地址。
看下面的例子
def foo(x):
x.append (3)
print "global",id(x)
x = [8]
print "local ",id(x)
return x
x=[1, 5]
print "global",id(x)
y= foo(x)
print "global",id(x)
print x
print y
Run Code Online (Sandbox Code Playgroud)
和输出
global 140646798391920
global 140646798391920
local 140646798392928
global 140646798391920
[1, 5, 3]
[8]
Run Code Online (Sandbox Code Playgroud)
如您所见,变量的地址x在您操作它时保持不变,但在您使用=. 函数内部的变量赋值使变量局部于函数
| 归档时间: |
|
| 查看次数: |
2197 次 |
| 最近记录: |