В чем разница между объектами карты и объектами генератора? - PullRequest
0 голосов
/ 14 апреля 2020

Какие из них лучше всего использовать в каких ситуациях? Я имею в виду объект, созданный с помощью 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')

output:

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'>

1 Ответ

1 голос
/ 14 апреля 2020

Разница между этими объектами очень мала. Они объясняют, что они являются разными объектами, из-за способности функции map принимать несколько итераций.

В этом случае он выполняет итерации по всем из них и на каждой итерации вызывает функцию с элементами из каждого из них. Он останавливается, когда завершается самая короткая итерация, на что не способен обычный генератор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...