Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在lambda-Python中使用导入的函数_Python_Django_Lambda - Fatal编程技术网

在lambda-Python中使用导入的函数

在lambda-Python中使用导入的函数,python,django,lambda,Python,Django,Lambda,我正在尝试创建一个基于不同参数的timedelta字典。例如 from django.utils import timezone a = {'Minutes':(lambda dt,delta: dt + timezone.timedelta(minutes=delta)), 'Hours': (lambda dt,delta: dt + timezone.timedelta(hours=delta)} 现在在使用上述词典时: new_time = a['Minutes'](time

我正在尝试创建一个基于不同参数的timedelta字典。例如

from django.utils import timezone
a = {'Minutes':(lambda dt,delta: dt + timezone.timedelta(minutes=delta)),
     'Hours': (lambda dt,delta: dt + timezone.timedelta(hours=delta)}
现在在使用上述词典时:

new_time = a['Minutes'](timezone.now(),10)
它给出了以下错误:

/usr/local/lib/python2.7/dist-packages/django/core/management/commands/shell.pyc in <lambda>(dt, delta)
----> 1 a = {'Minutes':(lambda dt,delta: dt + timezone.timedelta(minutes=delta))}
NameError: global name 'timezone' is not defined
/usr/local/lib/python2.7/dist-packages/django/core/management/commands/shell.pyc in(dt,delta)
---->1A={'Minutes':(lambda dt,delta:dt+timezone.timedelta(Minutes=delta))}
NameError:未定义全局名称“时区”
请解释为什么我不能在lambda中使用导入的函数。

此处参考:

(在Django 1.6中固定)

另请参见:


我之所以在这里发布这篇文章,是因为我经常遇到这个问题(这两条评论似乎与shell有关),尽管OP根本没有说明它们在Django shell中,所以这个答案可能与此无关。

您的代码在Django 1.6.1控制台中(添加了一个缺少的括号后)对我来说运行良好。对我来说不起作用。我在Python2.7中使用django 1.4。您是否在导入
django.utils.timezone
的同一模块中使用
a
?lambda主体中的名称查找发生在函数被调用时,而不是被定义。@Anuj这实际上是Django
/manage.py shell中的一个bug
…它在ipython上下文中做了一些有趣的事情。这在Django的最新版本中得到了修复。如果我能找到推荐人,我会把它贴出来作为答案。Django上有一张关于it@chepner你是否有任何证据支持你的lambda名称可见性声明?经验证据表明,lambdas看到的是定义它们的上下文(如常规函数),而不是调用它们的上下文(在2.7.5和3.3.0中)。我只是在shell中尝试,从未意识到这可能是shell中的错误。