【问题标题】:Multi-parameter function - Correct usage of *args / **kwargs多参数函数 - *args / **kwargs 的正确使用
【发布时间】:2013-02-02 00:23:29
【问题描述】:

我有一个这样的功能:

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 做到这一点?

【问题讨论】:

    标签: python optional-parameters args


    【解决方案1】:

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

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

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

    【讨论】:

    • 对,map() 也适用于此。我使用了map()的生成器表达式形式,这是Python中的常用习语。 map() 的好处是它不会浪费时间重新绑定循环变量名;它只是映射值。在 Python 2.x 中,您的解决方案将构建一个列表,然后立即销毁该列表,但在 Python 3.x 中 map() 是惰性的,此解决方案是最佳的。
    • 太棒了,谢谢!我尝试过这种方式,但在函数定义中使用“*args”而不是“args”。现在可以了!
    【解决方案2】:

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

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

    当你想收集参数时,你想把它们都一样对待,你不知道会有多少,这正是*args 语法的目的。这是一个完美的用例。

    **kwargs 收集 name=value 参数,您不希望这里有任何参数。

    【讨论】:

      猜你喜欢
      • 2023-04-06
      • 2013-01-03
      • 2012-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-28
      • 2018-02-15
      • 1970-01-01
      相关资源
      最近更新 更多