```
'''
测试type()和isinstance()两个函数,哪个速度更加的快
'''
import datetime
import random
def computing_time_outer(func) :
''' 计算函数执行时间 '''
def computing_time_inner(number) :
start_time = datetime.datetime.now()
func(number)
end_time = datetime.datetime.now()
print('此程序运行时间为:%s' % (end_time - start_time))
return computing_time_inner
def type_all_list(subscript) :
''' 设置多种数据类型,用来判断 '''
list_all_type = [1,'str', ['list', 3], ('tuple', 4), {'set', 5}, {'dict': 6}]
subscript_number = 6
if subscript > subscript_number :
return list_all_type[(subscript % subscript_number - 1)]
else :
return list_all_type[subscript - 1]
def random_type(subscript) :
''' 随机返回类型 '''
type_list = [int, str, list, tuple, set, dict]
return type_list[random.randint(0,5)]
@computing_time_outer
def type_repeatedly(number) :
''' 多次执行type()函数 '''
for i in range(number) :
type(type_all_list(i))
return
@computing_time_outer
def isinstance_repeatedly(number) :
''' 多次执行ininstance()函数 '''
for i in range(number) :
#isinstance(type_all_list(i),random_type(i))
isinstance(type_all_list(i), int)
#isinstance(1, int)
#isinstance({'name': 'an'}, dict)
return
print('type()函数:')
type_repeatedly(10000)
print('isinstance()函数:')
isinstance_repeatedly(10000)
```
#### 总结
直到写完我也不知道`type()`和`isinstance()`两个函数哪个效率更高,主要的影响就是在`isinstance()`函数。`type()`函数就只有一个参数,就只需要随机传入不同的类型的数据就OK了,`isinstance()`函数,有两个参数,对这两个参数的随机性进行调整答案也不同。
如果`isinstance()`函数和`type()`函数中的参数都是固定的,那`isinstance()`函数的效率比`type()`函数快了大概一倍,这是我认为最公平的方式,没有其他干扰因素作怪。(46行,`type()`类型固定数据没有被截图)
如果`type()`函数的参数的数据类型随机,`isinstance()`函数的第一个参数的数据类型随机,第二个参数不改变,那`isinstance()`函数的效率就会比`type()`函数低,大概会多20%到30%的时间。(45行)
如果`isinstance()`函数和`type()`函数中所有的参数都是随机的,那`isinstance()`函数会比`type()`函数慢三倍多大概。这样其实干扰因素是最多的,执行`isinstance()`函数多执行了一个自定义函数,这肯定也会浪费大量的时间。(当前结果)
如果要是真正的公平判断两个函数的效率的话还是使用固定判断比较合适,但是现在是为了学习,结果就不那么重要了。也可能是我现在写的代码有些问题,导致得到了错误的结果。