callable()
描述
- callable() 函数用于检查一个对象是否是可调用的。如果返回 True,object 仍然可能调用失败;但如果返回 False,调用对象 object 绝对不会成功。
- 对于函数、方法、lambda 函式、 类以及实现了 `__call__` 方法的类实例, 它都返回 True。
语法
callable(obj) # obj 为Python对象
返回值
可调用返回True,否则返回Fasle。
例子
In [1]: callable(0) # 0 不可调用
Out[1]: False
In [2]: callable('0') # 字符串不可调用
Out[2]: False
In [3]: def func():
...: return 0
...:
In [4]: callable(func) # 函数可调用
Out[4]: True
In [5]: class A:
...: pass
...:
In [6]: callable(A) # 类可调用
Out[6]: True
In [7]: a = A()
In [8]: callable(a) # 在类没有__call__方法时产生的类实例不可调用
Out[8]: False
In [9]: class B:
...: def __call__(self, *args, **kwargs):
...: pass
...:
In [10]: b = B()
In [11]: callable(b) # 在类有__call__方法时产生的类实例可调用
Out[11]: True
__call__()
Python有很多内置魔法方法,一般表现为双下划线开头和结尾。例如__name__、__doc__、__new__、__init__、__call__等,这些魔法方法会让对象持有特殊行为,为你写的类增加一些额外功能。__call__相当于将类实例变为一个可以调用的函数。
例子
class A:
def __call__(self, *args, **kwargs):
print('in __call__')
a = A()
a() # 返回 in __call__
import time
# 类装饰器
class Bar:
def __call__(self, func):
def wrapper(*args, **kwargs):
start = time.time()
res = func(*args,**kwargs)
end = time.time()
print('use_time:', start - end)
return res
return wrapper
@Bar() # 等价于 add = Bar()(add)
def add(a,b):
return a+b
print(add(1,2))