Python %timeit是否通过命令行中的参数应用于函数或引用?

Python %timeit是否通过命令行中的参数应用于函数或引用?,python,timeit,Python,Timeit,我正在遵循一个建议运行%timeit following的指南,其中following是一个已定义的函数 我尝试过使用import timeit,但由于某种原因%timeit无法运行。我得到一个语法错误,很明显我没有正确使用它。我做了一个简短的搜索,找到了关于timeit库的页面,但这让我在用法上更加困惑。我怀疑您将%timeit与timeit混淆了: 是一个IPython“magic”命令,它只能在IPython shell会话中工作。示例用途如下: In [1]: %timeit myfu

我正在遵循一个建议运行
%timeit following
的指南,其中
following
是一个已定义的函数


我尝试过使用
import timeit
,但由于某种原因
%timeit
无法运行。我得到一个语法错误,很明显我没有正确使用它。我做了一个简短的搜索,找到了关于
timeit
库的页面,但这让我在用法上更加困惑。

我怀疑您将
%timeit
timeit
混淆了:

  • 是一个IPython“magic”命令,它只能在IPython shell会话中工作。示例用途如下:

    In [1]: %timeit myfunc()
    
  • timeit
    是一个标准的Python模块-您可以在脚本中导入timeit,并使用
    timeit.timeit(“表达式”)
    等。有关详细信息,请参阅


下面的示例显示了一种可以在IPython会话中使用
timeit.timeit
的方法:

In [2]: def foo(): pass

In [3]: import timeit

In [4]: timeit.timeit("foo()", setup="from __main__ import foo", number=10000)
Out[4]: 0.004509925842285156
在本例中,我们的函数
foo
是在IPython会话的全局名称空间中定义的,因此我们从
\uuuuuu main\uuuu
导入它。如果它是在某个外部模块中定义的,则有必要修改
import
语句以反映这一点,例如:

In [5]: timeit.timeit("pow(10, 3)", setup="from math import pow", number=10000)
Out[5]: 0.00642085075378418

这里我正在从
数学
模块导入
pow
函数。

我怀疑您将
%timeit
timeit
混淆了:

  • 是一个IPython“magic”命令,它只能在IPython shell会话中工作。示例用途如下:

    In [1]: %timeit myfunc()
    
  • timeit
    是一个标准的Python模块-您可以在脚本中导入timeit,并使用
    timeit.timeit(“表达式”)
    等。有关详细信息,请参阅


下面的示例显示了一种可以在IPython会话中使用
timeit.timeit
的方法:

In [2]: def foo(): pass

In [3]: import timeit

In [4]: timeit.timeit("foo()", setup="from __main__ import foo", number=10000)
Out[4]: 0.004509925842285156
在本例中,我们的函数
foo
是在IPython会话的全局名称空间中定义的,因此我们从
\uuuuuu main\uuuu
导入它。如果它是在某个外部模块中定义的,则有必要修改
import
语句以反映这一点,例如:

In [5]: timeit.timeit("pow(10, 3)", setup="from math import pow", number=10000)
Out[5]: 0.00642085075378418

在这里,我正在从
数学
模块导入
pow
函数。

要尝试使用
timeit
从IPython's magic复制
%timeit
,请尝试以下操作:

timeit.Timer(my_function).repeat(3, 1000)
%timeit在执行n次时需要3次计数,其中n是在内部选择的(因此,在repeat()中选择1000次可能不是一个好的选择)

:

-n:在循环中执行给定语句n次。如果未给出该值,则选择拟合值

-r:重复循环迭代r次,获得最佳结果。默认值:3


要尝试使用
timeit
从IPython的魔法中复制
%timeit
,请尝试以下操作:

timeit.Timer(my_function).repeat(3, 1000)
%timeit在执行n次时需要3次计数,其中n是在内部选择的(因此,在repeat()中选择1000次可能不是一个好的选择)

:

-n:在循环中执行给定语句n次。如果未给出该值,则选择拟合值

-r:重复循环迭代r次,获得最佳结果。默认值:3


我明白了,它们实际上做的是相同的事情吗?
%timeit
本质上只是在IPython会话中调用
timeit.timeit
更方便的方法。我看了文档,谢谢。我认为最好的运行命令是:timeit.timeit('following()',number=10000)。为什么不正确?传递给
timeit
的表达式中没有定义
following
函数。要让
timeit
访问您自己定义的函数,可以传递
setup=
参数,例如
timeit.timeit(“following()”,setup=“from mymodule import following”)
。我链接到的文档页面底部有一个示例。我尝试按照建议使用上述代码,但没有成功。我收到了名称错误,说明它没有定义。我甚至尝试将mymodule更改为main,但它也不喜欢这样说,即没有找到某个参数。对于我来说,找出错误原因的最佳方法是什么?我明白了,他们实际上做了相同的事情吗?
%timeit
本质上只是在IPython会话中调用
timeit.timeit
更方便的方法。我看了文档,谢谢。我认为最好的运行命令是:timeit.timeit('following()',number=10000)。为什么不正确?传递给
timeit
的表达式中没有定义
following
函数。要让
timeit
访问您自己定义的函数,可以传递
setup=
参数,例如
timeit.timeit(“following()”,setup=“from mymodule import following”)
。我链接到的文档页面底部有一个示例。我尝试按照建议使用上述代码,但没有成功。我收到了名称错误,说明它没有定义。我甚至尝试将mymodule更改为main,但它也不喜欢这样说,即没有找到某个参数。对我来说,找出错误原因的最佳方法是什么?嗨,我试着运行这个程序,但我一直收到一个名称错误,
following
not found。有什么想法吗?嗨,我试过运行这个,但我一直收到一个名称错误,
following
找不到。有什么想法吗?