我想知道一堆陈述。例如:
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_beta
,vect2
和alpha
。我不能在计时器中包含那些,因为这也将包括它们的初始化开销。
我是Python新手,修改我的代码的答案将受到高度赞赏。
答案 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)