Python: задачки и вопросы
Ir al canal en Telegram
Вопросы и задачки для подготовки к собеседованиям и прокачки навыков Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Другие наши проекты: https://tprg.ru/media
Mostrar más6 864
Suscriptores
-224 horas
-137 días
-4730 días
Archivo de publicaciones
1. Создание генератора:
G = gen()
В этой строке создается объект генератора G, но код внутри функции gen() не начинает выполняться, пока не будет вызван next(G).
2. Первый вызов next(G):
print(next(G)) # 0
Когда вы вызываете next(G) в первый раз, генератор начинает выполнение с начала функции gen(). Внутри функции запускается цикл for и выполняется первая итерация, где i становится равным 0. Затем происходит yield i, что означает, что значение 0 возвращается, и генератор приостанавливается. Значение 0 выводится на экран.
3. Второй вызов next(G):
print(next(G)) # None 1
Теперь, когда вы вызываете next(G) во второй раз, генератор продолжает выполнение с той точки, где он был приостановлен (после yield). В этот момент выполнение доходит до X = yield i, и так как вызывается next(G) без передачи аргумента, X будет установлено в значение None. Затем срабатывает print(X), и выводится None.
Затем генератор продолжает выполнение, и значение X становится равным 1.Эта задача — логическое продолжение предыдущей. Мы имеем дело с генераторной функцией.
Значения отправляются генератору G путем вызова
G.send(значение). Затем код генератора возобновляет выполнение, и выражение yield в генераторе возвращает значение, переданное send. Если вызывается обычный метод G.__next_() (или его эквивалент next(G)) для продвижения вперед, тогда yield просто возвращает None.
>>> next(G) # Сначала должен вызываться next(), чтобы запустить генератор
... 0
>>> G.send(77)
... 77
... 1Скажите рутине STOP✋
👉 Ускорьте рабочие процессы и освободите время для более интересных дел — с помощью курса Слёрма «Python для инженеров».
Это обучение, заточенное на инженеров — в нём нет ничего лишнего, только то, что необходимо именно вам.
На курсе вы научитесь:
🔹 писать эффективный и поддерживаемый код;
🔹 писать Kubernetes-операторы и модули для Ansible;
🔹 создавать, использовать и тестировать свои API;
🔹 взаимодействовать с инструментами CI/CD, CVS и DevOps системами.
Для того, чтобы вы смогли «пощупать» курс изнутри, даём бесплатный пробный доступ на 3 дня. А при покупке даём в подарок мини-курс «Python, Чат-боты и DevOps» и видеокурс «Gitlab CI/CD».Набор до 28 января. Познакомиться с программой и занять своё место на курсе — по ссылке. Реклама ООО «Слёрм» ИНН 3652901451
Генератор — это специальная функция, которая возвращает итератор, с помощью которого можно обойти некоторую последовательность значений.
В крупных программах генераторы могут быть лучше в плане памяти и производительности. Они позволяют функциям избежать выполнения всей работы заранее, что особенно полезно, когда результирующие списки большие или получение каждого значения требует длительных вычислений. Генераторы распределяют время, необходимое для производства серии значений, по всем итерациям цикла.
def gen():
for i in range(10):
X = yield i
print(X)
G = gen()
print(next(G)) # Сначала должен вызываться next(), чтобы запустить генератор
К протоколу генераторных функций добавлен метод next. Он осуществляет переход на следующий элемент в серии результатов, а также снабжает вызывающий код возможностью взаимодействия с генератором для влияния на его работу.
Формально yield теперь имеет форму не оператора, а выражения, которое возвращает
элемент, переданный next.Чем отличается генераторная функция с yield от классической?
DataFrame.sort_values(by, *, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last', ignore_index=False, key=None)
Булевый параметр ascending отвечает за тип сортировки и по умолчанию равен True, т.е. датафрейм сортируется по умолчанию от меньшего к большему.Списковое включение может применяться также как разновидность операции проецирования столбцов. Стандартный API-интерфейс для работы с базами данных SQL в Python возвращает результаты запросов в форме последовательности последовательностей вроде следующей ниже; список представляет таблицу, кортежи — строки, а элементы в кортежах — значения столбцов:
listoftuples = [('bob', 35, 'mgr'), ('sue', 40, 'dev'), ('jack', 51, 'cio')]
С использованием цикла for можно было бы извлечь все значения из выбранного
«столбца» вручную, но списковые включения способны выполнить такую работу за один шаг, к тому же быстрее:
[age for (name, age, job) in listoftuples] # 35, 40, 52
Мы можем использовать списковые включения для комбинирования значений множества матриц. В задаче выше строится плоский список, который содержит результат попарного перемножения матриц.
