Операторы
Функции подобного рода, не содержащие return, представляют собой эквивалент Python того, что в ряде языков называется «процедурами». Они обычно вызываются как операторы, а результаты
Об этом стоит знать, потому что Python не будет сообщать о том, что вы пытаетесь потребить результат функции, в которой отсутствуют операторы
return
(и yield
) в функциях Python необязательны. Когда функция не возвращает значение явно, то она завершает работу, когда управление выходит за конец тела функции. Формально все функции возвращают какое-то значение; если не снабдить функцию оператором return
, тогда она автоматически будет возвращать объект None
:Функции подобного рода, не содержащие return, представляют собой эквивалент Python того, что в ряде языков называется «процедурами». Они обычно вызываются как операторы, а результаты
None
игнорируются, т.к. работа делается без вычисления полезного результата. Об этом стоит знать, потому что Python не будет сообщать о том, что вы пытаетесь потребить результат функции, в которой отсутствуют операторы
return
.pandas.Series.between
возвращает логическое значение Series, эквивалентное left <= series <= right. При обработке Series возвращает эквивалентную серию, состояющую из True / False.Документация
Однако чтобы отфильтровать датафрейм по числовому столбцу, можно использовать такой синтаксис:
df_filtered = df["col"].between(1983, 1986)
Зачем в проекте нужна директория __pycache__?
Anonymous Quiz
66%
Она содержит файлы байт-кода .pyc
6%
Она содержит minified-версии модулей (без разрывов строк)
12%
Она содержит все предыдущие версии модулей
15%
Она содержит кэш браузера при запуске веб-страниц
После того, как посредством обхода пути поиска модулей найден файл исходного кода, соответствующий оператору import, Python при необходимости компилирует его в байт-код.
Файлы байт-кода вынесены в отдельный подкаталог pycache и содержат в своих именах версию Python во избежание конфликтов и перекомпиляции, когда в системе установлено множество версий Python.
Обратите внимание, что компиляция происходит во время импортирования файла. Из-за этого вы обычно не будете видеть файл байт-кода .рус для файла верхнего уровня своей программы, если только он также не импортируется где-то в другом месте — лишь импортированные файлы оставляют после себя файлы . рус на компьютере.
Байт-код файлов верхнего уровня применяется внутренне и отбрасывается; байт-код импортированных файлов сохраняется в файлах для ускорения будущих операций импортирования.
Файлы байт-кода вынесены в отдельный подкаталог pycache и содержат в своих именах версию Python во избежание конфликтов и перекомпиляции, когда в системе установлено множество версий Python.
Обратите внимание, что компиляция происходит во время импортирования файла. Из-за этого вы обычно не будете видеть файл байт-кода .рус для файла верхнего уровня своей программы, если только он также не импортируется где-то в другом месте — лишь импортированные файлы оставляют после себя файлы . рус на компьютере.
Байт-код файлов верхнего уровня применяется внутренне и отбрасывается; байт-код импортированных файлов сохраняется в файлах для ускорения будущих операций импортирования.
Одна из новых возможностей, появившихся в Python 3.7, — классы данных (Data classes). Эти классы предназначены для автоматизации генерации кода, который используется для хранения данных.
Многие разработчики сталкиваются с необходимостью создавать подобные классы:
Уже на этом примере можно заметить избыточность: идентификаторы brand и model повторяются несколько раз. Более сложный класс может также содержать переопределенные методы eq и repr.
Для упрощения процесса создания таких классов модуль dataclasses предлагает декоратор @dataclass. С его помощью аналогичный код будет выглядеть так:
Теперь классы стали более читаемыми и лаконичными, а также сохраняют важные методы, такие как
Многие разработчики сталкиваются с необходимостью создавать подобные классы:
class RegularGuitar:
def __init__(self, brand, model):
self.brand = brand
self.model = model
Уже на этом примере можно заметить избыточность: идентификаторы brand и model повторяются несколько раз. Более сложный класс может также содержать переопределенные методы eq и repr.
Для упрощения процесса создания таких классов модуль dataclasses предлагает декоратор @dataclass. С его помощью аналогичный код будет выглядеть так:
from dataclasses import dataclass
@dataclass
class Guitar:
brand: str
model: str
Теперь классы стали более читаемыми и лаконичными, а также сохраняют важные методы, такие как
__eq__
и __repr__
, которые автоматически генерируются.enumerate(sequence, start=0)
Возвращает генератор, отдающий пары счётчик-элемент для элементов последовательности sequence. Начальное значение счетчика можно задать с помощью start.
На финальном шаге операции импортирования выполняется байт-код модуля. Все операции в файле выполняются по очереди, от начала до конца, и любые присваивания именам на данном шаге генерируют атрибуты результирующего объекта модуля. Так создаются инструменты, определяемые кодом модуля. Скажем, операторы def в файле запускаются на стадии импортирования для создания объектов функций и их присваивания атрибутам внутри объекта модуля. Функции затем вызываются в файлах, импортирующих файл модуля.
Из-за того, что последний шаг импортирования фактически выполняет код файла, если любой код верхнего уровня в файле модуля делает реальную работу, то ее результаты будут видны во время импортирования. Например, операторы print верхнего уровня в модуле отображают вывод при импортировании файла. Операторы def для функций просто определяют объекты для использования в будущем.
Из-за того, что последний шаг импортирования фактически выполняет код файла, если любой код верхнего уровня в файле модуля делает реальную работу, то ее результаты будут видны во время импортирования. Например, операторы print верхнего уровня в модуле отображают вывод при импортировании файла. Операторы def для функций просто определяют объекты для использования в будущем.
Будет ли пересобран байт-код модуля module.pyc, если изменить версию Python?
Anonymous Quiz
74%
Да
26%
Нет
Байт-код сохраняется в файлах внутри того же самого каталога, где находятся соответствующие файлы исходного кода, обычно с расширением . рус (например, module.рус). Файлы байт-кода также внутренне снабжаются меткой с номером версии Python, в которой они создавались (известной разработчикам как «магическое» поле), поэтому Python известно о том, что они должны быть заново скомпилированы, когда программа запускается под управлением другой версии Python. Скажем, если вы провели модернизацию до новой версии Python, где байткод отличается, тогда все ваши файлы байт-кода автоматически перекомпилируются из-за несовпадения номеров версий даже при отсутствии каких-либо изменений в исходном коде.
Зачем нужна средовая переменная PYTHONPATH?
Anonymous Quiz
37%
Чтобы указывать путь до пакета Python
22%
Чтобы импортировать модули не только из рабочего каталога
2%
Чтобы переключаться между bash / zsh / Powershell
39%
Для всего вышеперечисленного
Устанавливать переменную среды PYTHONPATH необходимо только при импортировании
из каталогов, отличающихся от каталога, в котором вы работаете (т.е. текущего каталога при работе в интерактивной подсказке или каталога, содержащего ваш файл верхнего уровня). На практике это часто встречающийся случай для нетривиальных программ.
Пример: вы используете в своем проекте Google Tesseract — OCR-систему, и перед её использованием в файле.py необходимо прописать путь до исполняемого файла.
из каталогов, отличающихся от каталога, в котором вы работаете (т.е. текущего каталога при работе в интерактивной подсказке или каталога, содержащего ваш файл верхнего уровня). На практике это часто встречающийся случай для нетривиальных программ.
Пример: вы используете в своем проекте Google Tesseract — OCR-систему, и перед её использованием в файле.py необходимо прописать путь до исполняемого файла.