- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我一直在玩 Celery/Django。在他们的示例 celery.py 文件中有以下行
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS, force=True)
其中lambda:settings.INSTALLED_APPS
是autodiscover_tasks()
中形参packages
的实参。 settings.INSTALLED_APPS
是一个元组。
autodiscover_tasks()
然后要么调用传递给它的函数,要么直接分配它在第一行之一中给出的变量...
packages = packages() if callable(packages) else packages
所以我的问题是。我只是不明白为什么这样做。显得很多余。为什么不像元组神希望的那样传递 settings.INSTALLED_APPS
。为什么要传递一个调用它的匿名函数呢?我在这里缺少什么?
最佳答案
由于 Celery 是异步的,因此 settings.Installed_Apps
在执行其他计算时不会发生变化是不固定的,因此将其包装在 lambda
中将其值封装为引用,直到它被调用。
编辑(添加评论示例):
setting.INSTALLED_APPS = 10
app.autodiscover_tasks(settings.INSTALLED_APPS, force=True) #is called with installed_apps = 10, so it give you an output.
现在想一想,当调用 app.autodiscover_tasks
并进行内部计算时,正在计算其他一些东西,并且 setting.INSTALLED_APPS
现在 = 8
,因为您确实使用了该变量,所以您的调用使用的是 10
而不是“8”,但将其封装到 lambda
中(app .autodiscover_tasks(lambda: settings.INSTALLED_APPS, force=True)
) 它会在需要时获取值,与它的实际值同步,应该是8
.
关于python - Lambda 用例混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37046966/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!