—
— используется генератор списка
— Функция
'spam' * 3 генерирует строку 'spamspamspam', которая состоит из трех повторений строки 'spam';— используется генератор списка
[], который обходит каждый символ строки 'spamspamspam';— Функция
f(x) просто возвращает переданное ей значение x без изменений.X = 99
def selector(): # Имя X используется, но не присваивается
print(X) # Имя X найдено в глобальной области видимости
selector()
В данной задаче важно помнить, что Python — интерпретируемый язык, то есть код читается и исполняется построчно.
— Переменной
— В функции
— В
— Затем
— Переменной
X присваивается значение 99;— В функции
selector() есть ключевое слово global: X ссылается на глобальную переменную;— В
selector() выполняется команда print(X), которая сразу же обращается к глобальной переменной X, и на данный момент её значение — 99. Поэтому на этом шаге будет выведено 99.— Затем
X присваивается новое значение 88, но это произойдёт после того, как было выведено значение.Операторы
Функции подобного рода, не содержащие 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__, которые автоматически генерируются.