说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
Python 内置函数 callable(object) 用来检测一个对象是否可调用,如果参数 object 是可调用的就返回 True,否则返回 False。要注意的是,如果返回 True,调用仍可能失败,但如果返回 False,则调用 object 将肯定不会成功。
以下是一些快速使用的示例:
callable(1) # False
callable('fun') # False
callable(str) # True
callable(map) # True
callable(lambda: 1) # True
# 自定义函数
def count(s):
return len(s)
callable(count)
# True
# 普通类
class C():
def method(self):
return 'C -> method'
c = C()
callable(c)
# False
callable(C)
# True
# 实现 __call__ 的类
class D():
def __call__(self):
return 'call D'
d = D()
callable(d)
# True
callable(D)
# True
# 自己,哈哈
callable(callable)
# True
这个函数一开始在 Python 3.0 被移除了,但在 Python 3.2 被重新加入。
Python 内置函数 callable(object)
右发传入任意一个对象,返回一个布尔值,表示它是否可调用。
关于可调用对象的介绍可见:Python 可调用对象 。
要注意的是,callable() 只检测它是不是一个可调用的对象,在实际执行调用时它不一定能调用成功,callable() 并不检测调用的成功性。
以下方法均可以实现此函数的功能,便于大家理解。
callable = lambda o: hasattr(o, '__call__')
import collections
isinstance(obj, collections.Callable)
要注意,类是可调用的(调用类将返回一个新的实例);如果实例所属的类有 __call__()
则它就是可调用的。
例如,我们利用缓存装饰器类:
from collections import OrderedDict
class LRU_Cache:
def __init__(self, original_function, maxsize=1024):
self.original_function = original_function
self.maxsize = maxsize
self.mapping = OrderedDict()
def __call__(self, *key):
mapping = self.mapping
try:
value = mapping[key]
print('以下结果使用缓存!')
mapping.move_to_end(key)
except KeyError:
value = self.original_function(*key)
if len(mapping) >= self.maxsize:
mapping.popitem(False)
mapping[key] = value
return value
使用:
p = LRU_Cache(ord, maxsize=3)
callable(p)
# True
for c in 'abcdecaeaa':
print(c, p(c))
'''
a 97
b 98
c 99
d 100
e 101
以下结果使用缓存!
c 99
a 97
以下结果使用缓存!
e 101
以下结果使用缓存!
a 97
以下结果使用缓存!
a 97
'''
更新时间:Sept. 17, 2023, 3:51 p.m. 标签:python 可调用 调用