Рубрики
Без рубрики

Python One Line Generator

Функция генератора – это пифитонный способ создания утечка, не сохраняя его в памяти. Это уменьшает использование памяти вашего кода без каких-либо дополнительных затрат. Следующий код показывает функцию get_numbers (n), которая возвращает список n случайных чисел. Импорт случайных # не генератор! # Создать и вернуть … Python один генератор линии Подробнее »

Автор оригинала: Chris.

Функция генератора – это пифитонный способ создания утечка, не сохраняя его в памяти. Это уменьшает использование памяти вашего кода без каких-либо дополнительных затрат.

Следующий код показывает функцию get_numbers (n) Это возвращает Список N Случайные числа.

import random


# NOT A GENERATOR!
# Create and return a list of numbers
def get_numbers(n):
    numbers = []
    for i in range(n):
        numbers.append(random.random())

    # List of n elements exists in memory
    return numbers


# Sum up 1000 random numbers
s = 0
for x in get_numbers(1000):
    s += x
print(s)

Однако это не очень эффективный код, потому что вы создаете список заранее без необходимости. Что если у вас было 1 000 000 000 номеров? Ваша память быстро заполнится!

Лучший способ – использовать функцию генератора с урожай Ключевое слово, которое создает случайные числа динамически, поскольку они итерации:

import random


# GENERATOR
# Generate numbers one by one
def generate_numbers(n):
    for i in range(n):
        yield random.random()


# Sum up 1000 random numbers
s = 0
for x in generate_numbers(1000):
    s += x
print(s)

Существует два больших преимущества для использования генератора:

  • (1) Вам не нужно сначала создавать огромный список и хранить его в памяти, но сгенерировать следующий элемент, когда вы повторяете его.
  • (2) Это короче и более лаконично.

Тем не менее, это может быть недостаточно кратко для вас! 😉 Итак, вот проблема, адресованная в этой статье:

Проблема : Можем ли мы написать генератор одного режима?

Давайте погрузимся в разные методы для достижения этого!

Метод 1: функция одноклассника

print(sum(random.random() for i in range(1000)))

Код состоит из следующих частей:

  • Печать () Функция печатает результат выражения к оболочке.
  • сумма () Функция суммирует по всем значениям в следующем ИТ
  • Выражение генератора Random.random () Для I в пределах (1000) Создает 1000 случайных чисел и подают их в функцию внешней суммы () без создания всех из них одновременно.

Таким образом, мы все еще не храним весь список 1000 номеров в памяти, но создаем их динамически.

Способ 2: EXEC ()

Следующий метод не совсем довольно, но решает проблему для создания генератора в одной строке кода.

exec('def g(n):\n    for i in range(n):\n        yield random.random()')

EXEC () Функция может быть использована для односилизащита каждого фрагмента кода Python под солнцем. Просто пройдите код, который вы хотите запустить как строку, и заменить все ножи с помощью символа Newline '\ N' Отказ Таким образом, вы можете создать генераторную функцию g (n) что динамически создает N случайные числа. Теперь вы можете итереть их, используя стандартный фрагмент кода:

s = 0
for x in g(1000):
    s += x
print(s)
# 488.318368852096

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

Упражнение : Какой вывод для вас? Почему это отличается от наших?

Python One-Liners Книга

Python Programmemers улучшит свои навыки информатики с этими полезными одноклассниками.

Python One-listers научит вас читать и писать «одноклассники»: краткие заявления полезных функций, упакованных в одну строку кода. Вы узнаете, как систематически распаковать и понимать любую строку кода Python и писать красноречие, мощно сжатый Python, как эксперт.

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

Используйте структуры данных для решения проблем реальных проблем, например, использование булевой индексации для поиска городов с загрязнением выше среднего Используйте Numpy Основы, такие как массив, форма, ось, тип, вещание, расширенная индексация, нарезка, сортировка, поиск, агрегация и статистика Рассчитайте базовую статистику многомерных массивов данных и алгоритмы K-означает для безоговорочного обучения Создайте более усовершенствованные регулярные выражения с помощью группировки и названных групп, отрицательные LookAeads, сбежавшие символы, пробелы, наборы символов (и наборы отрицательных символов) и жадные/негридические операторы Понимать широкий ассортимент темы компьютерных наук, включая анаграммы, палиндромы, сверты, перестановки, факториалы, простые числа, цифры фибоначчи, обфускации, поиск и алгоритмическую сортировку

К концу книги вы узнаете, как писать Python в его самых утонченных, и создавать краткие, красивые куски «Python Art» в простой строке.

Получите свой Python One-Liners сейчас !!

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python одноклассники (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.

Оригинал: “https://blog.finxter.com/python-one-line-generator/”