Python 3:在可迭代对象上应用运算符

2023-12-25

sum(iterable)实际上是:

def sum(iterable):
    s = 0
    for x in iterable:
        s = s.__add__(x)
    return s

Python 是否有内置函数可以在不设置初始值的情况下完成此操作?

# add is interchangeable with sub, mul, etc.
def chain_add(iterable):
    iterator = iter(iterable)
    s = next(iterator)
    while True:
        try:
            s = s.__add__(next(iterator))
        except StopIteration:
            return s

我遇到的问题sum是它不适用于支持的其他类型+运算符,例如Counter.


尝试查看 pythonreduce()功能 https://docs.python.org/3/library/functools.html#functools.reduce:您传入一个函数、一个可迭代对象和一个可选的初始值设定项,它将将该函数累积地应用于所有值。

例如:

import functools
def f(x,y):
    return x+y

print functools.reduce(f, [1, 2, 3, 4]) # prints 10
print functools.reduce(f, [1, 2, 3, 4], 10) # prints 20, because it initializes at 10, not 0.

您可以根据可迭代对象更改函数,因此它是非常可定制的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 3:在可迭代对象上应用运算符 的相关文章

随机推荐