2019年9月17日 / 496次阅读 / Last Modified 2019年10月7日
内置函数
判断变量是否是函数,就是判断一个对象是否可调用,在Python中,我们可以使用内置的hasattr函数来解决这个问题。因为,所有的可调用的对象,或函数,都有__call__这个属性。
hasattr函数是Python内置函数,它用来判断一个对象是否具有某个属性,返回True或False。
>>> hasattr(str, '__call__')
True
>>> hasattr(int, '__call__')
True
>>> a = 12345
>>> hasattr(a, '__call__')
False
>>> f = lambda x:x*2
>>> hasattr(f, '__call__')
True
很简单吧,记住在Python中,一切都是对象,函数也是一个对象。
另外,我们可以使用dir函数来将对象所有属性都打印出来,比如:
>>> dir(f)
['__annotations__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__globals__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
f指向一个lambda匿名函数,用dir(f)能看到,f有__call__属性,可以被调用,是个函数。
还可以使用python内置的callable函数来做判断。这个函数在python3.0的时候被拿掉了,后来在3.2的时候回归,所以有一些资料中没有这个函数的介绍。
class tfc():
def __init__(self, num):
self.num = num
def __call__(self):
print(self.num)
t1 = tfc(10)
t2 = tfc(20)
t3 = 30
print(callable(t1))
print(callable(t2))
print(callable(t3))
t1()
t2()
callable函数对对象是否有__call__函数进行简单判断,返回True或False。以下是运行结果:
E:\py>python tp1.py
True
True
False
10
20
使用callable函数比hasattr函数更专业一点。
-- EOF --
本文链接:https://www.pynote.net/archives/1160
《用hasattr或callable判断变量是否为函数》有1条留言
前一篇:reduce函数
后一篇:在Python函数中定义嵌套函数
©Copyright 麦新杰 Since 2019 Python笔记
函数也是对象,只要有__call__方法。 [ ]