[python]type和isinstance的比較
阿新 • • 發佈:2019-01-25
共同點
type和instanceof都可以判斷變數是否屬於某個內建型別
#-*- coding:utf8 -*-
from timeit import timeit
from dis import dis
#用type和isinstance分別判斷{'s'}是否屬於set型別
def a():return type({'s'})is set
def b():return isinstance({'s'},set)
def c():return type({'s'})==set
time = [timeit(a),timeit(b),timeit(c)]
#列印結果
print 'result:\n%s %s %s\n'%(a(),b(),c())
#列印時間
print 'time:\n%s\n'%( ''.join([str(_)+'\n' for _ in time]) )
#列印指令
print 'orders:\n'
dis(a)
print '\n'
dis(b)
print '\n'
dis(c)
執行3次 結果:
result:
True True True
time:
0.229784965515
0.217791080475 #最小
0.239007949829
time:
0.232392072678
0.21791100502 #最小
0.229682922363
time:
0.233175992966
0.220207929611 #最小
0.234972953796
orders:
5 0 LOAD_GLOBAL 0 (type)
3 LOAD_CONST 1 ('s')
6 BUILD_SET 1
9 CALL_FUNCTION 1
12 LOAD_GLOBAL 1 (set)
15 COMPARE_OP 8 (is)
18 RETURN_VALUE
6 0 LOAD_GLOBAL 0 (isinstance)
3 LOAD_CONST 1 ('s')
6 BUILD_SET 1
9 LOAD_GLOBAL 1 (set)
12 CALL_FUNCTION 2
15 RETURN_VALUE
7 0 LOAD_GLOBAL 0 (type)
3 LOAD_CONST 1 ('s')
6 BUILD_SET 1
9 CALL_FUNCTION 1
12 LOAD_GLOBAL 1 (set)
15 COMPARE_OP 2 (==)
由此可見,isinstance效率更高一些
不同點
- 1.type可以只接收一個引數,列印其未知的所屬的型別;而isinstance只能判斷是否屬於某個已知型別。
print type({'s'})
- 2.isinstance可以判斷子類物件是否繼承於父類;而type不可以。
class father(object):
pass
class son(father):
pass
if __name__ == '__main__':
print type(son())==father
print isinstance(son(),father)
print type(son())
print type(son)
結果:
False
True
<class '__main__.son'>
<type 'type'>
由不同點不難發現這倆函式的應用場景是不同的:
type主要用於獲取未知變數的型別
isinstance主要用於判斷A類是否繼承於B類