地图对象和生成器对象有什么区别?

问题描述 投票:0回答:1

其中哪些最适合在哪种情况下使用?我指的是用map(),生成器表达式和生成器函数制成的对象。

这里是我用来查看这些对象的代码。

str_ints = (str(x)for x in range(3))
f = len
map_obj = map(f, str_ints)
gen_obj_from_gen_expression = (f(e) for e in str_ints)

def gen_f():
  for e in str_ints:
    yield f(e)

gen_obj_from_function = gen_f()
for obj in (map_obj, gen_obj_from_gen_expression, gen_obj_from_function):
  print(f'object: {obj}\ntype: {type(obj)}\n')

输出:

object: <map object at 0x7f425c0f3f98>
type: <class 'map'>

object: <generator object <genexpr> at 0x7f425c1573b8>
type: <class 'generator'>

object: <generator object gen_f at 0x7f425c157570>
type: <class 'generator'>
python generator generator-expression
1个回答
1
投票

这些对象之间几乎没有什么区别。它们之所以认为它们是不同的对象,是因为map函数具有多个可迭代对象的能力。

在那种情况下,它会遍历所有对象,并且在每次迭代时,都使用其中每个元素的元素来调用函数。最短的可迭代时间结束时它将停止,这是常规生成器无法执行的操作。

© www.soinside.com 2019 - 2024. All rights reserved.