import functools import inspect # I expect from inspect.isfunction() the same behavior as inspect.isgeneratorfunction() and # inspect.iscoroutinefunction() async def corofn(): return 10 partial_corofn = functools.partial(corofn) assert inspect.iscoroutinefunction(partial_corofn) is True assert inspect.iscoroutinefunction(partial_corofn.func) == inspect.iscoroutinefunction(corofn) assert inspect.iscoroutinefunction(partial_corofn) == inspect.iscoroutinefunction(corofn), "This assertion doesn't work" assert inspect.iscoroutinefunction(partial_corofn) == inspect.iscoroutinefunction(partial_corofn.func) def genfn(): yield 10 partial_genfn = functools.partial(genfn) assert inspect.isgeneratorfunction(partial_genfn) is True assert inspect.isgeneratorfunction(partial_genfn.func) == inspect.isgeneratorfunction(genfn) assert inspect.isgeneratorfunction(partial_genfn) == inspect.isgeneratorfunction(genfn) assert inspect.isgeneratorfunction(partial_genfn) == inspect.isgeneratorfunction(partial_genfn.func) # But! def fn(): return 10 partial_fn = functools.partial(fn) assert inspect.isfunction(partial_fn) is True, "This assertion doesn't work" assert inspect.isfunction(partial_fn.func) == inspect.isfunction(fn) assert inspect.isfunction(partial_fn) == inspect.isfunction(fn), "This assertion doesn't work" assert inspect.isfunction(partial_fn) == inspect.isfunction(partial_fn.func), "This assertion doesn't work"