这是一个Python函数
def inc(x):
return x + 1
x = 1
isinstance
函数如果object参数是classinfo参数或其(直接,间接或虚拟)子类的实例,则返回true。
>>> isinstance(inc, types.FunctionType)
True
尽管在检查包装器中的函数时isinstance
不起作用。
>>> from dask import delayed
>>> isinstance(delayed(inc), types.FunctionType)
False
>>> isinstance(delayed(inc)(x), types.FunctionType)
True
有没有办法检查包装器中的Python函数?
答案 0 :(得分:1)
许多(但不是全部)装饰器返回一个FunctionType
。在@delayed
装饰器中包装函数时,它不会返回函数; returns a class instance (object) of Delayed
。
因此,您可能希望在这里callable()
,而不是更具体的types.FunctionType
:
>>> from dask import delayed
>>> def inc(x):
... return x + 1
...
>>> callable(inc)
True
>>> callable(delayed(inc))
True
在某些方面, callable()
比isinstance(..., types.FunctionType
更为“广泛”的检查,因为纯函数不是唯一可调用的函数。定义.__call__()
的类的实例也是如此。 Delayed
does indeed define .__call__()
类,因此很适合这里的费用。