小编典典

条件传递参数的Pythonic解决方案

python

我有一个带有两个可选参数的函数:

def func(a=0, b=10):
    return a+b

在我代码的其他地方,我正在做一些条件参数传递,例如:

if a and b:
   return func(a, b)
elif a:
   return func(a)
elif b:
   return func(b=b)
else:
   return func()

无论如何,是否可以简化此模式中的代码?

编辑

假设 不允许 我在内部实现默认参数逻辑func

我可能有几个功能,如funcfunc1func2并且func3都包含

a = a or 0
b = b or 10

陈述。

但是我正在调用这些功能来消除重复。(使用装饰器)


阅读 225

收藏
2021-01-20

共1个答案

小编典典

如果您不想更改任何内容,func那么明智的选择就是将参数的字典传递给函数:

>>> def func(a=0,b=10):
...  return a+b
...
>>> args = {'a':15,'b':15}
>>> func(**args)
30
>>> args={'a':15}
>>> func(**args)
25
>>> args={'b':6}
>>> func(**args)
6
>>> args = {}
>>> func(**args)
10

要不就:

>>>func(**{'a':7})
17
2021-01-20