我正在尝试学习Python,并且很少怀疑.r.t到Python中的多级嵌套函数和函数闭包。请帮助我了解这将如何运作。
以下代码中的问题:
示例代码:
# File: nesteFunc.py
def func1():
x1 = 1
def func2():
x2 = 2
def func3():
x3 = 3
print(x1, x2, x3)
return func3
if __name__ == "__main__":
f = func1()
f() # line 14
上面的代码给出了这条错误消息:
Traceback (most recent call last):
File "D:/Python Prep/nestedFunc", line 14, in <module>
f()
TypeError: 'NoneType' object is not callable
Process finished with exit code 1
答案 0 :(得分:6)
func1没有返回任何内容(隐式为None),这就是你得到异常的原因,如果你想从main块调用func3,只需返回func2,调用func2来获取func3然后调用它。
# File: nesteFunc.py
def func1():
x1 = 1
def func2():
x2 = 2
def func3():
x3 = 3
print(x1, x2, x3)
return func3
return func2
if __name__ == "__main__":
f2 = func1()
f3 = f2()
f3()
关于你的第二个问题,是的,func3将访问变量x1和x2,因为它们存在于父范围内。
答案 1 :(得分:0)
你不需要在func1()中返回func2或func3,如果它只是打印(x1,x2,x3)。你可以这样做:
# File: nesteFunc.py
def func1():
x1 = 1
def func2():
x2 = 2
def func3():
x3 = 3
print(x1, x2, x3)
func3()
func2()
if __name__ == "__main__":
func1()