gpt4 book ai didi

python - Python lambda 函数中的外部变量

转载 作者:太空狗 更新时间:2023-10-29 20:31:33 24 4
gpt4 key购买 nike

灵感来自 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:

有一个 IPython ticket在 GitHub 上讨论了该主题,但不清楚问题是否已经解决。

更新 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]

最佳答案

我知道您的示例和错误报告中的代码在金字塔框架的交互式 shell(pshell,ipython 0.12!)中确实可以成功运行,尽管我记得以前遇到过这个问题。关键是 ipython >= 0.11 它使用不同的代码。据我所知,0.10 代码仍然会有这个错误。

这是金字塔 pshell.py 的简化摘录

def make_ipython_v0_11_shell():
try:
from IPython.frontend.terminal.embed import (
InteractiveShellEmbed)
IPShellFactory = InteractiveShellEmbed
except ImportError:
return None

def shell(env, help):
IPShell = IPShellFactory(banner2=help + '\n', user_ns=env)
IPShell()

return shell

def make_ipython_v0_10_shell():
try:
from IPython.Shell import IPShellEmbed
IPShellFactory = IPShellEmbed
except ImportError:
return None

def shell(env, help):
IPShell = IPShellFactory(argv=[], user_ns=env)
IPShell.set_banner(IPShell.IP.BANNER + '\n' + help + '\n')
IPShell()

return shell

关于python - Python lambda 函数中的外部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18158193/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com