Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3:在iterable上应用运算符_Python_Python 3.x_Operators_Iterable - Fatal编程技术网

Python 3:在iterable上应用运算符

Python 3:在iterable上应用运算符,python,python-3.x,operators,iterable,Python,Python 3.x,Operators,Iterable,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

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
的问题是,它不适用于支持
+
运算符的其他类型,例如
计数器

尝试查看python:传入一个函数、一个iterable和一个可选的初始值设定项,它会将函数累积应用于所有值

例如:

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.

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

在添加的情况下:

import operator
reduce(operator.add, iterable)
这将适用于无法使用
sum
添加在一起的iterables。类似地,您可以使用

reduce(operator.mul, iterable)

这是
reduce()
的一个很好的用法,在Python 3中它被移动到了

以下是链式乘法的示例:

import functools
import operator

def chain_mul(iterable):
    return functools.reduce(operator.mul, iterable)

您可以将那里的
operator.mul
替换为模块中的其他函数之一,或者只定义自己的两个参数函数,对其参数进行操作。

这是一个很好的帮助,尽管reduce不是经常与第三个“初始”参数一起使用吗?例如,对于加法,它是0,对于乘法,它是1,对于字符串,它应该是“”(但字符串不能很好地相加)。它可以是,但不一定是。如果未给出任何值,则将从2开始的每个值与原始值相加。(如果iterable中没有任何内容,它会为没有初始值的空序列的
TypeError:reduce()抛出异常