【问题标题】:Python default values for parameters in delegated function calls委托函数调用中参数的 Python 默认值
【发布时间】:2013-06-28 16:39:38
【问题描述】:

有一个函数有一个参数的默认值:

def g(y, z = "default"):
    print  y, z

我想从函数“f”调用这个函数,其中还应该包含一个参数“z”,它应该是可选的,i。 e. “f”的用户应该能够调用“f”,无论是否提供“z”的值。如果他调用“f”而不在参数列表中传递“z”,“f”应该调用“g”,以便最后使用“z”的默认值。用作默认值的值(在本例中为“default”)应该在代码中只出现一次。

【问题讨论】:

    标签: python default-value optional-parameters delegation


    【解决方案1】:

    听起来您的主要目标是确保"default" 在代码中只出现一次。

    def g(y, z = None):
        if z is None:
            z = "default"
        print y, z
    
    def f(y, z = None):
        g(y, z)
    

    【讨论】:

    • 这似乎在实践中有效。 f(1, None) 意味着 f(1) 以外的其他东西的情况可能太学术了。
    【解决方案2】:

    使用**kwargs:

    def f(**kwargs):
        g("fixed-y", **kwargs)
    
    f() # prints "fixed-y default"
    f(z='mushroom') # prints "fixed-y mushroom"
    

    【讨论】:

    • 如果“f”看起来像这样:def f(a, b, w, z): h(..., w) g(..., z) i. e.这个问题有多个参数“w”和“z”。 “w”应传递给另一个函数“h”,“z”应传递给“g”。所以我不能在 **kwargs 中同时处理这两个问题。
    • 您将不得不做更多的工作,但没有什么可以阻止您将输入 kwargs 分成不同的部分。或者,如果您知道它们进入的顺序,则可以改用*args 位置参数。 h(a, args[0]); g(b, args[1]) 或其他。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-12
    • 2018-04-04
    • 2012-08-01
    相关资源
    最近更新 更多