Вначале вы должны решить, если вам нужен генератор, это также улучшенный метод. Как генератор списка "[elem for elem in somethink]". И генераторы рекомендуются, если вы просто используете значение в списке для некоторых операций. Но если вам нужен список для многих изменений и работа со многими элементами одновременно, это должен быть список.
(Как и в 70% случаев, если стандартный программист использует список, лучше будет генератор. Используйте меньше памяти, просто многие люди просто не видят другого способа составления списка. К сожалению, в наше время многие люди сочетаются с хорошей оптимизацией и просто работают .)
Если вы используете генератор для списка, чтобы улучшить возврат, давайте сделаем то же самое с yield, ребята. Так или иначе, мы получили несколько более оптимизированных методов для всех действий в языке программирования Python.
Урожай быстрее, чем возврат, и я докажу это.
Просто проверьте это, ребята:
data = range(1000)
def yielder():
yield from data
def appending():
L = []
app = list.append
for i in data:
app(L, i)
return L
def list_gen():
return [i for i in data]
Конечно, добавление будет медленнее, чем другие идеи, потому что мы создаем и расширяем список в любое время цикла. Просто цикл «для» очень неоптимизирован, если вы можете избежать этого, сделайте это. На любом этапе эта функция загружает следующий элемент и записывает нашу переменную, чтобы получить значение этого объекта в памяти. Таким образом, мы переходим к любому элементу, создаем ссылку, расширяем список в цикле (объявленный метод является огромным быстродействующим оптимизатором), когда мы генерируем только return, итоговый результат получает 2000 элементов в двух списках.
list_gen меньше памяти, мы просто возвращаем элементы, но, как и вверх, мы генерируем второй список. Теперь у нас есть два списка, оригинальные данные и ее копия. Резюме 2000 элементов. Там просто избегаем шага с созданием ссылки на переменную. Поскольку наш ген в списках избегает этого шага. Просто напишите элементы.
получатель использует меньше всего памяти, потому что мы получили только что полученное значение из данных. Мы избегаем одной ссылки. Например:
data = range(1000)
def yielder():
yield from data
def list_gen():
return [i for i in data]
#Now we generate next reference after line [i for i in data]
for i in list_gen():
#some instruction
#This is our first reference, becouse was yield from data.
for i in yielder():
#some instruction
Используйте только один элемент для какой-то инструкции, а не все из списка, следующее значение возвращает возвращаемое значение в следующем цикле, а не записывает все 1000 элементов для записи в ссылку.
Извините за небольшую раскопанную тему, как раз когда я случайно натолкнулся на поиск в Google, другие начинающие программисты на python увидели эту ерунду.