python3中的函数映射和reduce

python3中的函数映射和reduce,python,python-3.x,iterator,Python,Python 3.x,Iterator,Python 3中的返回值是迭代器 当需要Iterable时,为什么可以使用映射结果 reduce函数可以使用map返回的迭代器,因为迭代器是一个iterable对象。所有迭代器都有一个返回迭代器本身的\uuu iter\uu方法。这就是iterable所需要的(一个返回迭代器的\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu iter方法,但在某些情况下,您可以使用\uuuuuuuuuuuuuuuuuuu getitem方法) 这就是说,一些人会对他们的术语不在意

Python 3中的返回值是迭代器

当需要Iterable时,为什么可以使用
映射
结果


reduce
函数可以使用
map
返回的迭代器,因为迭代器是一个iterable对象。所有迭代器都有一个返回迭代器本身的
\uuu iter\uu
方法。这就是iterable所需要的(一个返回迭代器的
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu iter
方法,但在某些情况下,您可以使用
\uuuuuuuuuuuuuuuuuuu getitem
方法)

这就是说,一些人会对他们的术语不在意,在迭代器不可用时使用术语iterable(可能是因为他们需要对同一输入进行多次迭代)。不幸的是,对于iterables的子集没有一个精确的名称(尽管序列通常是合适的)


不过,Python文档通常对此非常有用。如果它说一个函数需要一个iterable,那么迭代器应该总是可以接受的。如果一个函数或方法需要对输入进行多次迭代(例如,
str.join
),如果输入的类型还不可接受,它将在内部构建自己的临时序列。

您可以将
map
的返回值传递给
reduce
,因为迭代器是可迭代的。Iterable的意思是“你可以在上面调用
iter
”。如果在迭代器上调用
iter
,您将再次得到相同的迭代器。请将示例代码作为文本,而不是图像。查看文本和与文本交互要容易得多(例如,我可以复制文本并将其传递到我自己的解释器中)。你可能会对这个关于迭代器和iterables之间区别的投票率很高的问题的答案感兴趣:我个人更喜欢我的答案,而不是这个更糟糕、现在已经关闭的问题(当然,我有偏见):
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from functools import reduce
def fn(x, y):
  return x * 10 + y
def char2num(s):
   digits = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
   return digits[s]
reduce(fn, map(char2num, '13579'))