【发布时间】:2013-08-10 02:47:47
【问题描述】:
受this answer 中的构造启发,我正在尝试执行以下操作:
values = range(3)
vector = np.random.randint(3, size=(5,))
f = lambda x: x in values
result = [f(a) for a in values]
但我得到global name 'values' is not defined。
如果我尝试上面链接的解决方案,我会得到同样的错误,即:
A = [[0,1,2], [1,2,3], [2,3,4]]
v = [1,2]
B = [map(lambda val: val in v) for a in A]
自从发布该解决方案后,Python 是否发生了变化? (我正在使用 2.7.4)。如果是这样,我如何访问 lambda 函数中的外部变量?我应该将其声明为全局吗?将其作为另一个输入传递?
更新 1:
我只是在 IPython (1.0) 的 嵌入式 shell 中注意到这个问题。
更新 2:
GitHub上有一个关于该主题的IPython ticket,但不清楚问题是否已经解决。
更新 3(不是来自 OP):
在 django 的 shell 中可以重现该错误(感谢 @Ashwini)
$ ./manage.py shell
Python 2.7.4 (default, Apr 19 2013, 18:32:33)
Type "copyright", "credits" or "license" for more information.
IPython 0.13.2 -- An enhanced Interactive Python.
In [1]: import numpy as np
In [2]: values = range(3)
In [3]: vector = np.random.randint(3, size=(5,))
In [4]: f = lambda x: x in values
In [5]: result = [f(a) for a in values]
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/usr/local/lib/python2.7/dist-packages/django/core/management/commands/shell.pyc in <module>()
----> 1 result = [f(a) for a in values]
/usr/local/lib/python2.7/dist-packages/django/core/management/commands/shell.pyc in <lambda>(x)
----> 1 f = lambda x: x in values
NameError: global name 'values' is not defined
In [6]: values
Out[6]: [0, 1, 2]
【问题讨论】:
-
第一个块中的代码在 python2.7 和 python3.3 上都适用于我。所以我不确定你的实际问题是什么
-
@inspectorG4dget 我更新了 OP
-
@user815423426 您的代码在 py2.x,3,x 和 ipy2.x, 3.x 中运行良好。但是,django 的 shell(ipy 2.7) 引发了同样的错误。奇怪!
标签: python django lambda ipython