鱼C论坛

 找回密码
 立即注册
查看: 1364|回复: 3

[已解决]关于timeit的问题

[复制链接]
发表于 2020-7-8 15:17:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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))

如代码所示,1.我想知道Timer类里面的第二个参数为什么是from__main__import t2?我看定义上面说的是,第二个参数是setup也就是执行第一个参数'stmt'即代码的语句需进行的设置,为什么不能是from timeit import Timer?没搞懂
                   2.第一行import语句引入的不应该是个模块吗?为什么它引入了一个类?直接import timeit 可以吗
最佳答案
2020-7-8 16:08:43


stmt:用于传入要测试时间的代码,可以直接接受字符串的表达式,也可以接受单个变量,也可以接受函数。传入函数时要把函数申明在当前文件中,然后在 stmt = ‘func()’ 执行函数,然后使用 setup = ‘from __main__ import func’

setup:传入stmt的运行环境,比如stmt中使用到的参数、变量,要导入的模块等。可以写一行语句,也可以写多行语句,写多行语句时要用分号;隔开语句。

number:要测试的代码的运行次数,默认100000次,对于耗时的代码,运行太多次会比较慢,此时建议自己修改一下运行次数

repeat:指测试要重复几次,每次的结果构成列表返回,默认3次。

1.
这里 __main__ 就表示在当前的代码下,from__main__import t2 就算导入当时代码下的 t2 函数,因为你要前面要进行测试的是 t2() 函数
2.
甲鱼哥模块那课的循环导入的问题,也是导入的是个函数呀,from timeit import Timer 就是导入 timeit 模块中的 Timer ,你可以直接 import timeit

from xxx import yyy 这样的导入,就是指定导入某些方法或模块啥的,而  timeit 没导入的就不能使用

但是 import timeit 将  timeit 模块中能导入的全部导入了,但是很多我们用不到,所以当你用的  timeit  模块的内容时候,你可以选择 第一个导入更为便捷



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-8 16:08:43 | 显示全部楼层    本楼为最佳答案   


stmt:用于传入要测试时间的代码,可以直接接受字符串的表达式,也可以接受单个变量,也可以接受函数。传入函数时要把函数申明在当前文件中,然后在 stmt = ‘func()’ 执行函数,然后使用 setup = ‘from __main__ import func’

setup:传入stmt的运行环境,比如stmt中使用到的参数、变量,要导入的模块等。可以写一行语句,也可以写多行语句,写多行语句时要用分号;隔开语句。

number:要测试的代码的运行次数,默认100000次,对于耗时的代码,运行太多次会比较慢,此时建议自己修改一下运行次数

repeat:指测试要重复几次,每次的结果构成列表返回,默认3次。

1.
这里 __main__ 就表示在当前的代码下,from__main__import t2 就算导入当时代码下的 t2 函数,因为你要前面要进行测试的是 t2() 函数
2.
甲鱼哥模块那课的循环导入的问题,也是导入的是个函数呀,from timeit import Timer 就是导入 timeit 模块中的 Timer ,你可以直接 import timeit

from xxx import yyy 这样的导入,就是指定导入某些方法或模块啥的,而  timeit 没导入的就不能使用

但是 import timeit 将  timeit 模块中能导入的全部导入了,但是很多我们用不到,所以当你用的  timeit  模块的内容时候,你可以选择 第一个导入更为便捷



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-9 08:10:02 | 显示全部楼层
为什么要从当前代码下导入t2?t2不本来就在这段代码中吗为什么还要导入?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-24 17:23:54 | 显示全部楼层
其实你可以这么写
from timeit import Timer


def t2():
    li = []
    for i in range(10000):
        li += [i]


timer2 = Timer(t2)
print('+:', timer2.timeit(1000))
我感觉起来和上面那个用起来差不多。但实际差距在哪,差距多大,我还不知道
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-17 14:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表