【发布时间】:2018-08-19 17:44:41
【问题描述】:
我有一个函数,它有两个主要参数来确定其余所需的参数。
例如,如果
main = 'a'
然后需要参数q,w,e
但是如果main = 'b'
然后需要参数a,s,d
作为参数传递给函数。
我知道我可以使用**kwargs 并添加一个基于main 的if 语句来选择可选参数,但我想知道是否有办法在没有可选参数的情况下执行此操作,因为整个参数集基于main 是必需的。
在没有两个函数的情况下,最pythonic的处理方式是什么?
kwargs 解决方案如下,以使问题更具重现性:
def function_(main, **kwargs):
if main == 'a':
q = kwargs.get('q')
w = kwargs.get('w')
e = kwargs.get('e')
return q * w * e
if main == 'b':
a = kwargs.get('a')
s = kwargs.get('s')
d = kwargs.get('d')
return a + d + s
【问题讨论】:
-
这些只是名称,您可以使用任何您想要的名称。名称绑定到对象。
-
@heemayl 你能扩展一下吗?我刚刚更新了问题以澄清需要返回不同的结果。我的实际代码比乘法/加法更复杂,它根据
main值调用不同的函数。 -
反对两个函数的原因是什么?
-
两个命名和定义良好的函数使代码维护更容易,而不是一个带有巨大 if/elif/else 块的函数...这里有两个或多个函数没有错...
-
如果有一组通用的东西函数 - 然后你把它移到另一个函数中,然后把通用的东西放在函数需要它们共享的地方......等等......
标签: python python-3.x function args keyword-argument