Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何正确导入函数以便在timeit中使用_Python_Timeit - Fatal编程技术网

Python 如何正确导入函数以便在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

我使用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.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):
        ...