python find the type of a function

放肆的年华 提交于 2019-12-31 05:47:10

问题


I have a variable f. How can I determine its type? Here is my code, typed into a python interpreter, showing that I get an error using the successful pattern of the many examples I have found with Google. (Hint: I am very new to Python.)

>>> i=2; type(i) is int
True
>>> def f():
...     pass
... 
>>> type(f)
<class 'function'>
>>> type(i)
<class 'int'>
>>> type(f) is function
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'function' is not defined
>>> f=3
>>> type(f) is int
True

With f a function, I tried casting the return value of type(f) to a string, with u = str(type(f)). But when I tried u.print() I got an error message. This raises another question for me. Under Unix do error messages from Python come on stderr or stdout?


回答1:


The pythonic way to check the type of a function is using isinstance builtin.

i = 2
type(i) is int #not recommended
isinstance(i, int) #recommended

Python includes a types module for checking functions among other things.

It also defines names for some object types that are used by the standard Python interpreter, but not exposed as builtins like int or str are.

So, to check if an object is a function, you can use the types module as follows

def f():
    print("test")    
import types
type(f) is types.FunctionType #Not recommended but it does work
isinstance(f, types.FunctionType) #recommended.

However, note that it will print false for builtin functions. If you wish to include those as well, then check as follows

isinstance(f, (types.FunctionType, types.BuiltinFunctionType))

However, use the above if you only want specifically functions. Lastly, if you only care about checking if it is one of function,callable or method, then just check if it behaves like a callable.

callable(f)


来源:https://stackoverflow.com/questions/54009407/python-find-the-type-of-a-function

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!