【问题标题】:How to write a python function that adds all arguments?如何编写一个添加所有参数的python函数?
【发布时间】:2012-07-17 10:05:29
【问题描述】:

我想编写一个 python 函数,它使用+ 运算符添加所有参数。未指定参数数量:

def my_func(*args):
    return arg1 + arg2 + arg3 + ...

我该怎么做?

最好的问候

【问题讨论】:

  • 当使用*args 时,args 是所有传递参数的列表。
  • @JoachimPileborg:准确地说是一个元组。
  • 如果这是How to find the list in a list of lists whose sum of elements is the greatest? 的后续操作,那么您需要指定此函数将采用哪种输入。你的问题,就目前而言,不会比我已经给你的答案更有帮助。
  • 但是输入是什么并不重要,它应该只是使用 + 运算符添加参数。
  • 好吧,那么 Python 内置的sum 有什么问题呢?这正是它的作用。

标签: python function arguments add


【解决方案1】:

只需使用sum 内置函数

>>> def my_func(*args):
...     return sum(args)
...
>>> my_func(1,2,3,4)
10
>>>

编辑:

我不知道你为什么要避免 sum,但是here we go

>>> def my_func(*args):
...   return reduce((lambda x, y: x + y), args)
...
>>> my_func(1,2,3,4)
10
>>>

除了lambda,您还可以使用operator.add


编辑2:

我查看了您的otherquestions,您的问题似乎是在使用自定义类时将sum 用作maxkey 参数。我answered你的问题,并在我的回答中提供了一种使用sum的方法。

【讨论】:

  • 但我不想使用sum函数。
  • @alwbtc - 你为什么不想呢?
  • @eumiro 也许他想将+ 运算符用于数字以外的情况。
  • @HenryGomersall 在这种情况下,他应该简单地将__radd__ 方法添加到他的类中。
  • 我假设您可以在第二种情况下使用 operator.add 而不是 (lambda (x, y): x + y) 减少,对吗? (似乎是正确的。)
【解决方案2】:

这个怎么样:

def my_func(*args):
    my_sum = 0
    for i in args:
        my_sum += i
    return my_sum

如果您不想使用+= 运算符,那么

my_sum = my_sum + i

【讨论】:

  • 通过将my_sum = 0 替换为my_sum = args[0] 并将循环替换为for i in args[1:],将其概括为与sum() 不同。现在,这适用于任何具有合理 __add__ 方法的对象列表。
  • 您也可以保留该方法,并在您的类中实现一个合理的__radd__ 方法。
  • @BigYellowCactus 如果不是自己的类,那么更改函数(例如字符串)可能会更容易。
【解决方案3】:

如果你肯定不会使用sum,那么类似:

def func(*args, default=None):
    from operator import add
    try:
        return reduce(add, args)
    except TypeError as e:
        return default

functools.reduce 在 Py3 中

【讨论】:

    猜你喜欢
    • 2022-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-03
    • 1970-01-01
    • 2022-06-17
    • 2012-01-11
    相关资源
    最近更新 更多