перечислить объект карты в Python3 - PullRequest
0 голосов
/ 07 мая 2018

Пример

def f(x):
    return x**2
list(map(f,[x for x in range(3)]))

1:

Как list автоматически перебирает объект карты? Что на самом деле здесь происходит?

2:

Поскольку list - это class, а объект карты - iterator, значит ли это, что когда класс действует на итератор, он всегда будет автоматически перебирать итератор?

Может кто-нибудь помочь мне здесь? Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Функция карты на самом деле является мощным инструментом для скорости. Он не отличается по функциональности от цикла for.

Функция map написана для непосредственного выполнения кодом C - следовательно, она выполняется быстрее, чем если бы она выполнялась интерпретированным кодом Python. Работает с любой функцией (первый параметр) и повторяется (второй параметр).

list(map(f,[x for x in range(3)])) # [0, 1, 4]

совпадает с ..

for x in range(3):
    f(x)

Вы также можете использовать лямбда-выражение. Это даст те же результаты, что и ваша функция, без объявления функции:

list(map(lambda f: (f ** 2), [x for x in range(3)])) # [0, 1, 4]
0 голосов
/ 07 мая 2018
  1. Инициализатор list делегирует list.extend(), если ему передается итерация.

  2. Нет.Это поведение характерно для типов последовательностей.

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