多参数功能 - 正确使用* args / ** kwargs

时间:2013-02-02 00:23:29

标签: python optional-parameters args

我有一个像这样的功能:

def hexify_string(aString):
    #code for string2hexa conversion

...我希望有一个接受一个或多个(数量未定义)参数的函数,并返回参数总和的十六进制表示。

def hexify(a,b...n):
    #map hexify_string to all the parameters, and return the sum of them

有没有办法使用* args / ** kwars?

2 个答案:

答案 0 :(得分:2)

这是你想要的吗?收集任意数量的参数,这些参数都应该是字符串。将每个字符串传递给hexify_string(),返回一个整数。求和整数并返回总和。

def hexify(*lst):
    n = sum(hexify_string(s) for s in lst)
    return n

当你想要收集参数时,你想要对它们进行相同的处理,而你不知道它们会有多少,这正是*args语法的用途。这是一个完美的用例。

**kwargs收集name=value个参数,你不需要这些参数。

答案 1 :(得分:2)

*args获取所有非关键字参数并将其转换为列表。您可以将hexify_string映射到列表的每个元素,然后返回列表中所有元素的总和。

def hexify(*args);
    return sum(map(hexify_string, args)

这假设您的hexify_string函数返回十六进制值,而不是字符串。