我正在搜索如何在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)
答案 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
。