callable()函数是Python的一个内置函数。该函数判断一个对象是否可被调用,如果传递给该函数的对象可被调用,则返回True,否则返回False。在实际中,即使该函数返回True,也有可能在调用该对象时会失败,当然,若该函数返回的是False,在调用该对象时绝对不会成功。
在Python类中如果定义了__call__()方法,则该类的实例是可调用的。
通俗地讲,一般情况下用户定义的方法/函数是可以调用的,但类的实例一般不能按照方法/函数的形式来调用,但如果类的内部实现了__call__()方法,则该类的实例可以按照方法/函数的形式来调用。
注意:callable()函数在Python 3.0版本中被移除,又再3.2版本中重新添加了回来。
callable(object)
object:要判断的对象或实例。
该函数的返回值是一个布尔值:True或False.
下面使用几个实例来讲解callable()方法的具体使用方法。
#函数
def fun():
print("调用fun()函数")
#创建一个对象
fun1 = fun
class test:
def __call__(self, *args, **kwargs):
print("定义了__call__()方法")
#创建类的实例
test_obj = test()
print("fun is callable?",callable(fun))
print("fun1 is callable? ",callable(fun1))
print("test is callable? ",callable(test))
print("test_obj is callable? ",callable(test_obj))
#调用试试
fun()
fun1()
test()
test_obj()
输出结果:
fun is callable? True
fun1 is callable? True
test is callable? True
test_obj is callable? True
调用fun()函数
调用fun()函数
定义了__call__()方法
在上面的例子中,我们首先定义了一个函数fun(),然后定义了fun()函数的一个引用对象fun1;其次定义了一个类Test和类的一个实例test_obj,在类Test中实现了__call__()函数;最后测试函数fun()、函数的引用fun1、类和类的对象test_obj的可调用性。从结果可以看出四个对象的callable()函数返回值都是True,并且调用都获得了成功。
一般情况,在对象的可访问范围内,类和方法/函数本身总是可以调用的,但类的实例在未定义__call__()函数时则不能被调用。
下面的例子演示了callable()函数返回False的几种情况:
n = 123
s = 'VeVb.com'
lst = ['R', 'Python', 'SPSS']
t = ('优雅的代码订阅号','武林网')
d ={'K1':'V1','K2':'V2'}
class Student:
sid = 0
def __init__(self,sid):
self.sid = sid
stu = Student('001')
print("n is callable?", callable(n))
print("s is callable?", callable(s))
print('列表对象可调用?', callable(lst))
print('元组对象可调用?', callable(t))
print('字典对象可调用?', callable(d))
print('stu is callable?', callable(stu))
输出结果如下:
n is callable? False
s is callable? False
列表对象可调用? False
元组对象可调用? False
字典对象可调用? False
stu is callable? False
从上面的例子中可以得出:数值变量、列表对象、元组对象、字典对象等是不可调用的,这显而易见,且这种调用也没有实际意义的;类中未实现__call__()方法,类的实例也是不能调用的。
callable()方法主要在程序中调用某个对象时而预防出错设置的函数。用户在调用某个对象前,预先使用callable()方法判断其可调用性而避免出现TypeError错误。
新闻热点
疑难解答