| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
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” 
#所以也是可以执行的 
 
 
 
 |   
 
 
 
 |