地图对象和生成器对象有什么区别?
What is the difference between map objects and generator objects?
这些中的哪一个最适合在哪些情况下使用?我指的是用 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'>
这些对象之间几乎没有区别。他们之所以认为它们是不同的对象,是因为 map
函数具有获取多个可迭代对象的能力。
在这种情况下,它会遍历所有这些元素,并且在每次迭代时,都会使用其中每个元素的元素调用函数。当最短的可迭代完成时它停止,这不是常规生成器能够做的事情。
这些中的哪一个最适合在哪些情况下使用?我指的是用 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'>
这些对象之间几乎没有区别。他们之所以认为它们是不同的对象,是因为 map
函数具有获取多个可迭代对象的能力。
在这种情况下,它会遍历所有这些元素,并且在每次迭代时,都会使用其中每个元素的元素调用函数。当最短的可迭代完成时它停止,这不是常规生成器能够做的事情。