如何确定给定的功能是否为
我知道我可以说len(function.__closure__) > 0
,但这只会回答是否为闭包。非闭包嵌套函数呢?还有更好的方法吗?
答案 0 :(得分:3)
带有空封闭名称集的嵌套函数与在模块级别定义的函数之间的唯一区别是它们的__qualname__
。所有函数都有一个__closure__
属性,当没有封闭的名称集时该属性为空。
__qualname__
属性是可写的,因此不是检测嵌套函数的可靠方法,但是您可以在其中寻找字符串.<locals>.
:
>>> def foo():
... def bar():
... pass
... return bar
...
>>> foo().__qualname__
'foo.<locals>.bar'
使用封闭名称的嵌套函数将具有非空的__closure__
元组。