1

为什么第一个打印语句没有给我'5 = 3'?这是来自约翰古塔格的书。我无法理解它。

顺便说一句,它看起来像这样:

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()
4

4 回答 4

1

您所做的所有更改x都仅限于函数的本地范围f。除非您声明 x global ( global x),x否则不会从3全局空间中改变。

于 2013-07-01T02:18:19.900 回答
1

定义一个函数不会执行它,所以f定义了之后,x=3就执行了。调用该函数f(x)并将结果分配给 z。

f(x)调用过程中,又定义了两个函数,然后x=x+1执行。所以第一个打印语句是3 = 4.

这应该足以帮助您弄清楚其余部分。

于 2013-07-01T02:31:49.767 回答
0

来自 Python 文档

全局语句是适用于整个当前代码块的声明。这意味着列出的标识符将被解释为全局变量。没有全局变量就不可能分配给全局变量,尽管自由变量可以引用全局变量而不被声明为全局变量。

例如,g如果目标是改变全局,函数应该是这样的x

def g():
    global x
    x = 'abc'
    print '1 =',x
于 2013-07-01T02:16:39.980 回答
0

因为您f(x)在拥有第一个顶级 print 语句之前调用,所以第一个 print 语句是在f. 这解释了与明显词汇顺序的所有偏差。

于 2013-07-01T02:29:41.660 回答