【问题标题】:optional arguments function可选参数函数
【发布时间】:2012-10-15 20:20:03
【问题描述】:

我正在寻找如何在 python 中使用可选参数。 我已阅读this question,但我并不清楚。 假设我有一个函数 f 可以接受 1 个或多个参数来理解时间序列。我是否有义务指定参数的数量并为每个参数设置默认值? 我的目标是能够以这种方式编写函数:

简单的功能:

def f(x,y):
    return x + y
#f(1,2) returns 3

我也想要 f(1,2,3) 返回我 6 和 f(7) 返回我 7

是否可以在不设置预定义数量的强制/可选参数的情况下编写它? 是否可以在不必将默认值设置为 0 的情况下编写它? 这个函数怎么写?

这是一个简单的数字示例,但我需要编写的函数是比较一组连续的对象。比较完成后,数据集将馈入神经网络。

感谢阅读。

编辑: 我为函数提供的对象是这样的元组 (float,float,float,bool,string)

【问题讨论】:

  • 将列表作为参数传递对您有用吗?

标签: python


【解决方案1】:
def f(*args):
    """
        >>> f(1, 2)
        3

        >>> f(7)
        7

        >>> f(1, 2, 3)
        6

        >>> f(1, 2, 3, 4, 5, 6)
        21
    """
    return sum(args)

如果你需要做一些比 sum 更复杂的事情,你可以像这样遍历args:

def f(*args):
    r = 0
    for arg in args:
        r += arg
    return r

查看more information on *args and **kwargs这个问题

另请参阅 Python 教程中的此部分:Arbitray Argument List

【讨论】:

  • 您应该向 OP 展示如何在循环中进行求和,以使 args 是函数中的元组更加明确。 (但不要删除sum 的答案。最终,这更惯用)
【解决方案2】:

您可以使用以下语法:

def f(*args):
    return sum(args)

args 之前的 * 告诉它“吞下”所有参数,将 args 设为一个元组。只要*args 在最后,您也可以将此形式与标准参数混合使用。例如:

def g(a,b,*args):
    return a * b * sum(args)

第一个示例使用内置的sum 函数来汇总参数。 sum 为您添加一个序列:

>>> sum([1,3,5])
9
>>> sum(range(100))
4950

args 名称不是强制性的,但按惯例使用,因此最好坚持使用。还有 **kwargs 用于未定义的关键字参数。

【讨论】:

    【解决方案3】:

    您可以将*args 放入您的函数中,然后采用任意(非关键字)参数。 *args 是一个元组,因此您可以像任何 Python 元组/列表/可迭代一样对其进行迭代。即:

    def f(*args):
        theSum = 0
        for arg in args:
            theSum += arg
        return theSum
    
    print f(1,2,3,4)
    

    【讨论】:

    • 这是 seksy 编程范式
    猜你喜欢
    • 2015-04-30
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    • 2019-02-26
    • 2017-05-26
    相关资源
    最近更新 更多