为什么第一个印刷语句不能给我'5 = 3'?这是John Guttag的书。无法理解它。
顺便说一下:
3 = 4
2 = 4
1 = abc
4 = 4
5 = 3
6 = <function g at 0x026B22F0>
1 = abc
脚本:
def f(x):
def g():
x = 'abc'
print '1 =',x
def h():
z = x
print '2 =',z
x = x+1
print '3 =',x
h()
g()
print '4 =', x
return g
x = 3
z = f(x)
print '5 =',x
print '6 =',z
z()
答案 0 :(得分:1)
您对x
所做的所有更改仅限于本地作用范围f
。除非您声明x global(global x
),否则x
不会从全局空间中的3
更改。
答案 1 :(得分:1)
定义函数不会执行它,因此在定义f
后,执行x=3
。调用函数f(x)
并将结果分配给z。
在f(x)
调用期间,定义了另外两个函数,然后执行x=x+1
。所以第一个打印语句是3 = 4
。
这应该足以帮助你弄清楚其余部分。
答案 2 :(得分:0)
全局语句是一个声明,它包含整个当前代码块。这意味着列出的标识符将被解释为全局变量。没有全局变量就不可能分配给全局变量,尽管自由变量可以引用全局变量而不被声明为全局变量。
例如,如果目标是更改全局g
,则x
函数应如下所示:
def g():
global x
x = 'abc'
print '1 =',x
答案 3 :(得分:0)
因为在获得第一个顶级print语句之前调用了f(x)
,所以第一个print语句是f
中执行的第一个print语句。这解释了所有与明显词汇顺序的偏差。