用hasattr或callable判断变量是否为函数

2019年9月17日 / 496次阅读 / Last Modified 2019年10月7日
内置函数

判断变量是否是函数,就是判断一个对象是否可调用,在Python中,我们可以使用内置的hasattr函数来解决这个问题。因为,所有的可调用的对象,或函数,都有__call__这个属性。

hasattr函数

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__属性,可以被调用,是个函数。

callable函数

还可以使用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条留言

您的电子邮箱地址不会被公开。 必填项已用*标注

  • 麦新杰

    函数也是对象,只要有__call__方法。 [回复]


前一篇:
后一篇:

More

麦新杰的Python笔记

Ctrl+D 收藏本页


©Copyright 麦新杰 Since 2019 Python笔记

go to top