Python 如何正确导入函数以便在timeit中使用
我使用timeit函数在我编写的两个方法上运行一些度量,我遇到了一个问题。请参见下面的简化示例文件: fileA.py,它独立运行,我正在尝试测试函数foo和timeit:Python 如何正确导入函数以便在timeit中使用,python,timeit,Python,Timeit,我使用timeit函数在我编写的两个方法上运行一些度量,我遇到了一个问题。请参见下面的简化示例文件: fileA.py,它独立运行,我正在尝试测试函数foo和timeit: if (len(sys.argv) < 2): print "Need a command line argument, exiting" sys.exit(1) def foo(n): #does some stuff, returns an int 我遇到的问题是,当我运行fileC.p
if (len(sys.argv) < 2):
print "Need a command line argument, exiting"
sys.exit(1)
def foo(n):
#does some stuff, returns an int
我遇到的问题是,当我运行fileC.py时,我得到“需要一个命令行参数,exitng”并且它退出。我知道这来自fileA.py,但为什么要运行这部分代码呢?我的印象是,按照timeit的工作方式,我只是从fileA导入foo。我想错了吗?如果是这样的话,纠正这个问题的最佳方法是什么,这样我就可以测试方法
foo(n)
并保持fileA使用所需的命令行参数独立运行的能力?Python必须评估整个fileA
模块,以从fileA import foo中解析-将foo
作为模块级变量名而不是函数是完全合法的,由必须求值才能获得正确值的代码创建。为了避免这种情况,请包装本应仅在中调用fileA
时运行的代码:
if __name__ == '__main__':
if (len(sys.argv) < 2):
...
如果uuuu name_uuuu=='\uuuuuuu main\uuuuuu':
如果(len(sys.argv)<2):
...
有关更详细的解释,请参阅此问题的公认答案:
非常有效,谢谢!特别感谢您提供了详细解释的链接。您还可以简化计时方法,尽管这并不能解决导入问题:首先直接导入模块,然后使用functools.partial
创建一个可调用函数,直接传递给timeit
(而不是包含代码的字符串)。@KarlKnechtel Nifty,我想我会经常使用timeit(这是一门数据结构课程),所以下次我会尝试一下。
if __name__ == '__main__':
if (len(sys.argv) < 2):
...