嵌套范围误解

时间:2018-01-24 20:21:09

标签: python

我完全理解Python中不同范围的想法,但我无法清楚地理解这些代码,所以如果有人可以向我解释,第18行的回报是什么意思,我会很高兴的?不应该是return g()例如吗?这意味着什么是变量?输出是z =函数g在0x15b43b0,这是什么意思?

最后一件事,最后一行中的z()是什么?没有叫做z !!的函数。

def f(x):
    def g():
        x='abc'
        print 'x=',x
    def h():
        z=x
        print 'z=',z
    x=x+1
    print 'x=',x
    h()
    g()
    print 'x=',x
    return g

x=3
z=f(x)
print 'x=',x
print 'z=',z
z()

2 个答案:

答案 0 :(得分:3)

  

第18行的回报是什么意思?

它返回了函数对象g本身。

  

不应该返回g()吗?

不一定。传递函数是完全可以接受的,因为它们只是Python中的其他对象。 return greturn g()都有效,意思不同。

  

这意味着什么是变量?

g是绑定到函数对象的名称,在调用时会打印x=abc然后返回None。是的,g是一个变量(它是一个局部变量)。

  

输出是z =函数g在0x15b43b0,这是什么意思?

这意味着名称z绑定到内存位置0x15b43b0处名为g的函数。 (提示:它实际上是与内部范围中的名称g绑定的相同功能对象)

  

最后一件事,最后一行中的z()是什么?

这意味着调用名称z绑定的对象。即它调用f返回的函数。

  

没有名为z

的函数

这里没有__name__属性等于z的函数。但是名称z仍然可以绑定到函数对象。请记住,对象可以有多个名称(或根本没有名称)。

答案 1 :(得分:1)

g是使用def定义的函数的名称。 g()调用该函数并为您提供结果,而g是函数对象本身的名称(即引用)。

是的,有一个名为'z'的功能。它等于调用f(x)返回的函数,即使用arg x调用的函数f。这是与return g

一行的函数g

除了范围,您可能需要检查高阶函数和闭包概念。