【发布时间】:2019-01-22 18:47:03
【问题描述】:
我有一个芹菜工人运行的一系列任务。当任务完成时,链将该任务的结果作为(位置)参数转发到下一个任务。每个任务都有自己的参数 + *args 来处理结转的参数。问题是我想为任务的参数使用关键字参数,但那些结转的参数只是位置参数。下面的代码只是一个简单的例子来展示我不使用芹菜链的问题:
def test_func(data1,*args):
print(data1, '\t', args)
def b():
return {'data2':'b'}
test_func(data1='a', b())
我知道这会生成“语法错误:位置参数跟随关键字参数”,因为第一个参数使用的是参数名称,而第二个没有。
如果我知道如何正确返回函数 b() 的结果,那么我的问题就迎刃而解了。也就是说,在调用时以将 b() 视为关键字参数的方式返回 b() 的结果
test_func(data1='a', b())
更新: celery 链将每个任务的结果传递到链中下一个任务的第一个参数,而不是最后一个参数。这是我的坏事,因为我是芹菜链的新手。因此,我只是在函数头中切换了位置参数和关键字参数的位置,我的问题得到了如下解决:
def test_func(data1, data2):
print(data1, '\t', data2)
def b():
return 'b'
test_func(b(),data2='a')
由于 Python 允许在位置参数之后有一个关键字参数,因此一切都可以顺利运行。
感谢@MatiasCicero 和@C.Nivs 的回答。
【问题讨论】:
标签: python python-3.x arguments celery celery-canvas