Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.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,我想给一大堆陈述计时。例如: s = """\ for i in range (0,3): for j in range (0,4): if alpha_beta[i,j] == 0 and vect2[i] != 0.0 and alpha[j] == 1 : print(i,j) alpha_beta[i,j] = vect2[i] """ timeit.timeit(stmt=s, number=100) 但它抛出错

我想给一大堆陈述计时。例如:

s = """\
for i in range (0,3):
    for j in range (0,4):
        if alpha_beta[i,j] == 0 and vect2[i] != 0.0 and alpha[j] == 1 :
            print(i,j)
            alpha_beta[i,j] = vect2[i]
"""
timeit.timeit(stmt=s, number=100)
但它抛出错误:
未定义名称“alpha_beta”

变量
alpha_beta
vect2
alpha
已在前面定义。我不能将它们包括在计时器中,因为这将包括它们的初始化开销


我是Python新手,如果您能回答修改我的代码,我将不胜感激。

您可以在
设置中导入它们:

timeit.timeit(stmt=s, setup='from __main__ import alpha_beta, vect2, alpha', number=100)
从Python 3.5开始,还可以在提供的
globals
命名空间中执行代码。将其设置为
globals()
将启用
stmt
从模块的命名空间访问名称:

timeit.timeit(stmt=s, number=100, globals=globals())

您可以在
设置中导入它们

timeit.timeit(stmt=s, setup='from __main__ import alpha_beta, vect2, alpha', number=100)
从Python 3.5开始,还可以在提供的
globals
命名空间中执行代码。将其设置为
globals()
将启用
stmt
从模块的命名空间访问名称:

timeit.timeit(stmt=s, number=100, globals=globals())

一种解决方案是提供函数而不是字符串。这样,您的代码就可以轻松地访问创建它的上下文中的全局变量

也就是说,您的代码将变成:

def f():
    for i in range (0,3):
        for j in range (0,4):
            if alpha_beta[i,j] == 0 and vect2[i] != 0.0 and alpha[j] == 1 :
                print(i,j)
                alpha_beta[i,j] = vect2[i]   

timeit.timeit(stmt=f, number=100)

一种解决方案是提供函数而不是字符串。这样,您的代码就可以轻松地访问创建它的上下文中的全局变量

也就是说,您的代码将变成:

def f():
    for i in range (0,3):
        for j in range (0,4):
            if alpha_beta[i,j] == 0 and vect2[i] != 0.0 and alpha[j] == 1 :
                print(i,j)
                alpha_beta[i,j] = vect2[i]   

timeit.timeit(stmt=f, number=100)