函数映射并在python3中减少

时间:2018-08-21 03:51:36

标签: python python-3.x iterator

Python 3中map function的返回值是 Iterator

reduce function在需要 Iterable 时为什么可以使用map结果?

#!/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'))

1 个答案:

答案 0 :(得分:0)

reduce函数可以使用map返回的迭代器,因为迭代器是一个可迭代的对象。所有迭代器都有一个__iter__方法,该方法返回迭代器本身。这就是您需要迭代的全部内容(一个返回迭代器的__iter__方法,尽管在某些情况下,您可以使用__getitem__方法进行迭代)。

也就是说,当 iterator 不会使用时,少数人会不小心使用术语,而使用术语 iterable (也许是因为他们需要迭代几次相同的输入)。不幸的是,该可迭代子集没有一个确切的名称(尽管通常使用 sequence 序列)。

Python文档对此通常非常好。如果说函数期望可迭代,则迭代器应始终可接受。如果某个函数或方法需要对输入进行多次迭代(例如str.join),则如果输入的类型不是可接受的,它将在内部建立自己的临时序列。