从timeit访问外部变量

时间:2016-05-20 17:46:43

标签: 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)

但它会引发错误:name 'alpha_beta' is not defined

先前已定义变量alpha_betavect2alpha。我不能在计时器中包含那些,因为这也将包括它们的初始化开销。

我是Python新手,修改我的代码的答案将受到高度赞赏。

2 个答案:

答案 0 :(得分:3)

您可以在setup中导入它们:

timeit.timeit(stmt=s, setup='from __main__ import alpha_beta, vect2, alpha', number=100)

从Python 3.5开始timeit.timeit也可以在提供的globals命名空间中执行代码。将其设置为globals()将使stmt能够访问模块命名空间中的名称:

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

答案 1 :(得分:2)

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

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

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)