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錯誤。
新聞熱點
疑難解答