【问题标题】:Requiring one of two sets of parameters in function based on first parameter根据第一个参数在函数中需要两组参数之一
【发布时间】: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


【解决方案1】:

您可以执行以下操作:

def function_(main, *args, **kwargs):
    if main == 'a':
        q, w, e = args
    elif main == 'b':
        a, s, d = args

或者可能有两个你中继到的函数:

def function_(main, *args, **kwargs):
    if main == 'a':
        function_a_(*args, **kwargs)
    elif main == 'b':
        function_b_(*args, **kwargs)

但我会挑战这种构造的必要性,而是尝试使用具有正常参数的正常函数来做到这一点。

【讨论】:

    猜你喜欢
    • 2015-07-15
    • 2012-06-24
    • 2020-05-23
    • 1970-01-01
    • 2019-06-27
    • 2021-12-18
    • 2011-06-26
    • 2018-05-02
    • 2012-06-25
    相关资源
    最近更新 更多