【发布时间】:2015-09-04 16:52:29
【问题描述】:
我在 Django 控制台中做了一些事情,我意识到在 lambda 表达式中无法识别全局变量,例如,如果您在 python 中甚至在 iPython 控制台中执行以下代码,它可以完美运行:
a = 10
foo = lambda x: x + a
foo(10) # returns 20
但是如果你在 Django shell 中使用 iPython 执行它就行不通了:
In [8]: foo = lambda x: x + a
In [9]: a = 10
In [10]: foo(10)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/usr/local/lib/python2.7/dist-packages/django/core/management/commands/shell.pyc in <module>()
----> 1 foo(10)
/usr/local/lib/python2.7/dist-packages/django/core/management/commands/shell.pyc in <lambda>(x)
----> 1 foo = lambda x: x + a
NameError: global name 'a' is not defined
iPython 版本 0.13.2
提前谢谢你!
编辑
如果我在 lambda 函数之前分配 a,问题仍然存在:
In [1]: a = 10
In [2]: foo = lambda x: x + a
In [3]: foo(10)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/usr/local/lib/python2.7/dist-packages/django/core/management/commands/shell.pyc in <module>()
----> 1 foo(10)
/usr/local/lib/python2.7/dist-packages/django/core/management/commands/shell.pyc in <lambda>(x)
----> 1 foo = lambda x: x + a
NameError: global name 'a' is not defined
In [4]:
───────────
【问题讨论】:
-
如果你访问
a会发生什么? -
@PadraicCunningham 它没有发生任何事情,问题停留在 lambda 表达式中
-
尝试在 lambda 函数之前分配
a = 10。 -
@Pynchia 请看我的编辑:D
-
您使用的是什么版本的 django?您如何使用
python manage.py shell -i ipython启动 ipython shell?您的代码适用于我在 django 1.8.2 上使用 ipython shell
标签: python django python-2.7 ipython django-shell