可选参数功能

时间:2012-10-25 15:35:45

标签: python

我正在搜索如何在python中使用可选参数。 我看过this question,但我不清楚。 假设我有一个函数f,可以使用一个或多个参数来理解时间序列。我有必要指定参数的数量并为每个参数设置默认值吗? 我的目标是能够以这种方式编写函数:

简单的功能:

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)

3 个答案:

答案 0 :(得分:4)

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)

如果你需要做一些比总和更复杂的事情,你可以像这样迭代args

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

请参阅more information on *args and **kwargs

的此问题

另见Python教程的这一部分:Arbitray Argument List

答案 1 :(得分:4)

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

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

print f(1,2,3,4)

答案 2 :(得分:1)

您可以使用以下语法:

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