我一直在玩芹菜。在他们的例子中芹菜.py文件下面一行
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS, force=True)
其中lambda:settings.INSTALLED_APPS
是autodiscover_tasks()
中形式参数packages
的实际参数。并且settings.INSTALLED_APPS
是一个元组。在
autodiscover_tasks()
然后调用传递给它的函数,或者直接赋值它在第一行中给定的变量。。。在
所以我的问题是。我为什么不这么做。这似乎很多余。为什么不把settings.INSTALLED_APPS
当作元组神想要的那样传递呢。为什么要传递一个调用它的匿名函数呢?我错过了什么?在
除了Daniel的答案之外,下面是一个非常简单的示例,通过传递callable来展示“延迟评估”。在
这是一个函数,它返回另一个函数以伪造异步执行。在
构建两个函数:
^{pr2}$在创建
foo1
和foo2
之后,更改foo_arg
:调用函数:
foo1
使用旧的foo_arg
构造它,foo2
调用匿名函数来获取foo_arg
的当前值。在由于Celery是异步的,因此
settings.Installed_Apps
在执行其他计算时不会发生变化,因此将其包装在lambda
中会将其值封装为引用,直到被调用为止。在编辑(添加注释示例):
现在想一想,当},因为您确实使用了这个变量,所以您的调用使用了
app.autodiscover_tasks
被调用并进行其内部计算时,setting.INSTALLED_APPS
现在{10
而不是'8',但是将它封装到lambda
(app.autodiscover_tasks(lambda: settings.INSTALLED_APPS, force=True)
)中,当他需要它时,它将得到值,与它的实际值同步,它应该是8
。在相关问题 更多 >
编程相关推荐