Timeit 模块,三引号代码 vs 函数
Timeit module, triple quotes code vs function
我使用 timeit
模块来衡量我的代码的执行情况,在检查不同的脚本时,我发现 'the same script' 上存在很大差异,但定义方式不同。
Code.py
导入时间
code = '''
def count():
for i in range(100):
pass
'''
def count():
for i in range(100):
pass
print(timeit.timeit(code))
print(timeit.timeit(count))
输出:
0.17939981000017724
3.7566073690004487
幕后到底发生了什么?我的意思是,在这两种情况下,这段代码完全相同,但执行时间差异很大。
code
仅在字符串中而不是函数定义中。
code = '''
def count():
for i in range(100):
pass
'''
它不执行任何计算或迭代。 code
:
'\ndef count():\n for i in range(100):\n pass\n'
但 count
是:
<function __main__.count()>
在字符串示例中,您只是在定义函数而不是实际调用它,因此您实际上是在为函数的创建而不是它的执行计时。
您需要在 code
字符串的末尾附加一个 count()
函数调用,以使其真正 运行 并包含在分析中。
code = '''
def count():
for i in range(100):
pass
count()
'''
但请注意,从技术上讲,您在字符串示例中为函数声明和执行计时,而在第二个示例中仅为函数调用计时。
这样比较会更公平:
code = '''
def count():
for i in range(100):
pass
'''
def count2():
for i in range(100):
pass
print(timeit.timeit("count()", setup=code))
print(timeit.timeit(count2))
我使用 timeit
模块来衡量我的代码的执行情况,在检查不同的脚本时,我发现 'the same script' 上存在很大差异,但定义方式不同。
Code.py 导入时间
code = '''
def count():
for i in range(100):
pass
'''
def count():
for i in range(100):
pass
print(timeit.timeit(code))
print(timeit.timeit(count))
输出:
0.17939981000017724
3.7566073690004487
幕后到底发生了什么?我的意思是,在这两种情况下,这段代码完全相同,但执行时间差异很大。
code
仅在字符串中而不是函数定义中。
code = '''
def count():
for i in range(100):
pass
'''
它不执行任何计算或迭代。 code
:
'\ndef count():\n for i in range(100):\n pass\n'
但 count
是:
<function __main__.count()>
在字符串示例中,您只是在定义函数而不是实际调用它,因此您实际上是在为函数的创建而不是它的执行计时。
您需要在 code
字符串的末尾附加一个 count()
函数调用,以使其真正 运行 并包含在分析中。
code = '''
def count():
for i in range(100):
pass
count()
'''
但请注意,从技术上讲,您在字符串示例中为函数声明和执行计时,而在第二个示例中仅为函数调用计时。
这样比较会更公平:
code = '''
def count():
for i in range(100):
pass
'''
def count2():
for i in range(100):
pass
print(timeit.timeit("count()", setup=code))
print(timeit.timeit(count2))