马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
看了别人的代码,如下:from timeit import Timer
def t2():
li=[]
for i in range(10000):
li+=[i]
timer2=Timer('t2()','from __main__ import t2')
print('+:',timer2.timeit(10000))
然后我自己写出来了这样:from timeit import Timer
def t2():
li = []
for i in range(10000):
li += [i]
timer2 = Timer(t2)
print('+:', timer2.timeit(1000))
别人的代码Timer里面是 't2()','from __main__ import t2'
我的只有一个 t2
我想知道这两者之间的区别
timer2=Timer('t2()','from __main__ import t2')
timer2 = Timer(t2)
#查找了这个Timer的__init__
def __init__(self, stmt="pass", setup="pass", timer=default_timer,
globals=None):
# 本来以为你在构造对象,没有按照str格式传入会报错
# 但其实Timer 的作者也想到了这点
# 所以他在你传入参数时候加了判断
''' if isinstance(stmt, str):
# Check that the code can be compiled outside a function
compile(stmtprefix + stmt, dummy_src_name, "exec")
stmt = reindent(stmt, 8)
elif callable(stmt): # callable(t2)函数用于检查一个t2是否是可调用的
local_ns['_stmt'] = stmt
init += ', _stmt=_stmt'
stmt = '_stmt()'
else:
raise ValueError("stmt is neither a string nor callable")
'''
#你的构建的对象timer2 = Timer(t2)。传入的是t2
# 触发了如下判断
# callable(t2)函数用于检查一个t2是否是可调用的
# callable(t2) 返回True
# Timer自动使用另外的流程将 参数传达
# 也是就说 在构建timer2 = Timer(t2) ,你只要参数位置填对
# Timer(t2) Timer(‘t2()’) 都是可以的
# 第二个位置你不填 会给默认值“pass”
#所以也是可以执行的
|