【问题标题】:Global name "x" not defined using timeit全局名称“x”未使用 timeit 定义
【发布时间】:2016-01-24 17:45:37
【问题描述】:

我有一个简单的斐波那契函数,它使用记忆,它本身就可以正常工作。但是,当我想使用 timeit 计时时,我得到“NameError: global name 'memo' is not defined”,即使它是。

#!/usr/bin/python

import sys
import timeit

memo = [0] * 100

def fibmem(n,memo):
    #function things

for x in range(1,40):

    mytime2 = timeit.Timer('fibmem('+str(x)+', memo)','from __main__ import fibmem')
    delta2 = mytime2.timeit(1)
    print str(x) + ' ' +str(delta2)
    memo[:] = []

我已经尝试查找它可能是什么,但大多数答案都包括from __main__ import,这不是问题所在。我确信它仍然与范围界定有关,但我对 timeit 很陌生,所以我不知道。

【问题讨论】:

标签: python scope global nameerror timeit


【解决方案1】:

memo添加到从__main__导入的变量列表中:

mytime2 = timeit.Timer('fibmem({}, memo)'.format(x),'from __main__ import fibmem, memo')

【讨论】:

  • 是的,它做到了。谢谢!
  • Python 3.5 中的 timeit.Timer 类有一个名为 globals 的可选关键字参数,它也可以用来解决问题——尽管这种方式在 Python 2 和 3 中都适用。
猜你喜欢
  • 2010-10-07
  • 2013-12-12
  • 1970-01-01
  • 2013-08-14
  • 1970-01-01
  • 2018-05-04
  • 2015-12-22
  • 2014-04-18
  • 2015-08-08
相关资源
最近更新 更多