2

我正在寻找如何在 python 中使用可选参数。我读过这个问题,但我不清楚。假设我有一个函数 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)

4

3 回答 3

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)

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

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

有关*args 和 **kwargs的更多信息,请参阅此问题

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

于 2012-10-25T15:38:51.203 回答
4

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

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

print f(1,2,3,4)
于 2012-10-25T15:40:14.913 回答
1

您可以使用以下语法:

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

前面告诉它“吞下”所有参数,制作*一个元组。您也可以将此形式与标准参数混合使用,只要最后进行即可。例如:argsargs*args

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

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

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

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

于 2012-10-25T15:39:45.490 回答