我完全理解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()
答案 0 :(得分:3)
第18行的回报是什么意思?
它返回了函数对象g
本身。
不应该返回g()吗?
不一定。传递函数是完全可以接受的,因为它们只是Python中的其他对象。 return g
和return 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
除了范围,您可能需要检查高阶函数和闭包概念。