【发布时间】:2016-03-28 13:12:30
【问题描述】:
我正在尝试学习 Python,并且对 .r.t 对 Python 中的多级嵌套函数和函数闭包有一些疑问。请帮助我了解这是如何工作的。
以下代码中的问题:
- 如何从主块调用 func3 ?
- func3 是否可以从 func1 访问 x1 或仅从 func2 的直接封闭范围访问 x2?。
示例代码:
# 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
【问题讨论】:
-
func1不返回函数对象,因此调用func1()将返回 None 到变量f。而f()引发 TypeError。 -
在
func1的底部放return func2然后你可以做f2 = func1(); f3 = f2(); f3()。或者做一些更理智的事情。 -
不知道为什么在 Python 中需要这个,但这通常会给出非 Python 的、不可维护的代码。
-
在 func1 末尾添加“return func2”有效。感谢您的回复。
-
你从来没有定义一个名为
f的函数,所以在最后一行你不能调用它。
标签: python function python-3.x