这个
from __future__ import print_function
from functools import partial
from itertools import imap, product
identity = lambda x: x
identity.__repr__ = 'id'
map_identity = partial(map, identity)
map_identity.__repr__ = 'map'
imap_identity = partial(imap, identity)
imap_identity.__repr__ = 'imap'
prod_map = partial(product, repeat=1)
prod_map.__repr__ = 'prod'
list(map(
lambda (f, g):
print(
"{f_repr:4}(range(10)) compare {g_repr:4}(range(10)): "\
"{{ less: {less:1}, equal: {equal:1}}}".format(
f_repr=f.__repr__,
g_repr=g.__repr__,
less=f(range(16))<g(range(16)),
equal=f(range(16))==g(range(16)),
)
),
product([identity, map_identity, imap_identity, prod_map], repeat=2)
))
返回
id (range(10)) compare id (range(10)): { less: 0, equal: 1}
id (range(10)) compare map (range(10)): { less: 0, equal: 1}
id (range(10)) compare imap(range(10)): { less: 0, equal: 0}
id (range(10)) compare prod(range(10)): { less: 0, equal: 0}
map (range(10)) compare id (range(10)): { less: 0, equal: 1}
map (range(10)) compare map (range(10)): { less: 0, equal: 1}
map (range(10)) compare imap(range(10)): { less: 0, equal: 0}
map (range(10)) compare prod(range(10)): { less: 0, equal: 0}
imap(range(10)) compare id (range(10)): { less: 1, equal: 0}
imap(range(10)) compare map (range(10)): { less: 1, equal: 0}
imap(range(10)) compare imap(range(10)): { less: 1, equal: 0}
imap(range(10)) compare prod(range(10)): { less: 1, equal: 0}
prod(range(10)) compare id (range(10)): { less: 1, equal: 0}
prod(range(10)) compare map (range(10)): { less: 1, equal: 0}
prod(range(10)) compare imap(range(10)): { less: 0, equal: 0}
prod(range(10)) compare prod(range(10)): { less: 1, equal: 0}
迭代器的原因是什么,imap
并且在比较时与列表/prod_map
行为不同?id
map