Инструкция pass
В этой статье мы рассмотрим, зачем нужна инструкция pass
и как ее можно использовать.
pass, как временная заглушка
Как часто у вас возникает прекрасная идея, которую вы откладываете на потом? У программистов — довольно часто. Однако нельзя просто так бросить написание функции или блока кода. Если вы попробуете так сделать, интерпретатор выдаст ошибку.
>>> def solve_all_problems():
...
File "<stdin>", line 2
^
IndentationError: expected an indented block after function definition on line 1
>>> for i in data_structure:
...
File "<stdin>", line 2
^
IndentationError: expected an indented block after 'for' statement on line 1
В таких случаях на помощь приходит инструкция pass
. Мы просто оставляем ее как заглушку после отступа, пока не вдохновимся написать эту часть кода. Чтобы не забыть, что должен делать блок, который замещает pass, мы можем добавить комментарий, TODO-комментарий или строки документации.
def solve_all_problems(sample):
'''solves all problems'''
pass # TODO: Должна возвращать 42 на первой выборке
Пропускать части кода полезно на раннем этапе проектирования программы. Создавая макет, мы не станем задерживаться на мелочах, и просто обозначим важные, на наш взгляд, компоненты программы. Детали их реализации можно временно пропустить с помощью инструкции pass
. Так вы избежите дублирования и избыточного кода еще до того, как ваша программа заработает.
class Table
def _get_row(self):
pass
def _set_row
pass
class SiteTable(Table):
pass
Иногда программа просто выполняет какие-то действия очень долго, а вам нужно быстро проверить что-то независимое от этих действий. В этом случае можно закомментировать мешающую часть кода и поставить pass
.
def func(lst):
for i in lst:
if i < 0:
pass
# wait_30_mins()
else:
set_true(i)
pass, как полноценный компонент программы
Инструкция pass не всегда является временным решением. Иногда она заполняет блоки, в которых в принципе не должно ничего находиться
Например, при обработке исключений. Не всегда ошибка может привести к серьезным последствиям. Иногда они настолько незначительны, что нет нужды вносить их в лог. Однако в блоке except
обязательно должен быть код.
try:
smth.append(lst[1])
except IndexError:
pass
В случае, если список lst
не содержит элемента с индексом 1
, мы просто продолжим выполнение программы, без логирования этой ошибки или остановки работы.
Еще один способ использования pass - в цепочках if-elif
. Инструкция pass
после elif
, помогает сохранять логику проверки. В нашем примере все значения меньше нуля запускают func2(), кроме -1
.
if index > 0:
func1()
elif index == -1:
pass
elif index < 0:
func2()
else:
raise ValueError("Индекс не должен быть равен нулю")
Инструкция pass
может использоваться в абстрактных методах.
import abc
class Table(abc.ABC):
@abc.abstractmethod
def get_headers(self):
pass
class RuTable(Table):
def get_headers:
return ["Автор", "Книга"]
class EnTable(Table):
def get_headers
return ["Author", "Book"]
Абстрактный метод get_headers
абстрактного класса Table
никогда не будет использоваться — но все подклассы обязательно должны перезаписать его, каждый со своей логикой. Мы можем написать в него что угодно, но зачем, если есть инструкция pass
?
Заключение
Инструкция pass
выполняет роль заглушки, позволяя блоку кода ничего не делать. Её часто используют как временное решение при проектировании, разработке и тестировании на Python. В завершенных программах эта инструкция используется везде, где синтаксис требует написать блок кода, но логика подсказывает ничего не делать.
Возможно будет интересно
🏆 Hello, world!
Мы вчера запустили новый www.pylot.me. Должны были в следующую среду, но запустили вчера.
Как практиковаться в Python?
Для улучшения качества знаний и повышения уровня программиста, необходим постоянный практикум. Где можно это организовать самостоятельно, и как практиковаться в Python?
Условные конструкции и сопоставление структурных шаблонов
Шпаргалка по условным конструкциям и сопоставлению структурных шаблонов