Я нахожусь в процессе изучения Python, и я дошел до раздела об pass
утверждении. Руководство, которое я использую, определяет его как Null
утверждение, которое обычно используется в качестве заполнителя.
Я до сих пор не до конца понимаю, что это значит. Может кто-нибудь показать мне простую / базовую ситуацию, где pass
будет использоваться утверждение и зачем оно нужно?
pass
было бы полезно, если вы хотите переопределить метод в подклассе, чтобы ничего не делать.pass
вexcept
блоке получается очень удобно.Ответы:
Предположим, вы разрабатываете новый класс с некоторыми методами, которые вы пока не хотите реализовывать.
Если бы вы пропустили
pass
, код не запустился бы.Затем вы получите:
Подводя итог,
pass
заявление не делает ничего конкретного, но оно может выступать в качестве заполнителя, как показано здесь.источник
return
, хотя с небольшой потерей ясности.pass
, но я все еще не совсем понимаю, что он делает. Есть ли применение для этого в производственном коде? Из вашего примера я бы предпочел просто не добавлять этот метод, пока я не буду готов его реализовать, или я бы просто сделал этоreturn
.Python имеет синтаксическое требование , чтобы блоки кода (после того, как
if
,except
,def
, иclass
т.д.) не может быть пустым. Пустые блоки кода, однако, полезны в различных контекстах, например, в примерах ниже, которые являются наиболее частыми случаями использования, которые я видел.Следовательно, если в блоке кода ничего не должно происходить,
pass
для такого блока не требуется aIndentationError
. В качестве альтернативы можно использовать любое утверждение (включая только оцениваемый термин, например,Ellipsis
литерал...
или строку, чаще всего строку документации), но из этогоpass
становится ясно, что на самом деле ничего не должно происходить, и его не нужно фактически оценивать и (хотя бы временно) хранится в памяти.Игнорирование (все или) определенного типа
Exception
(пример изxml
):Примечание: Игнорирование всех типов повышений, как в следующем примере из
pandas
, обычно считается плохой практикой, потому что оно также ловит исключения, которые, вероятно, должны быть переданы вызывающей стороне, например,KeyboardInterrupt
илиSystemExit
(или дажеHardwareIsOnFireError
- откуда вы знаете, что это не так запуск на пользовательском ящике с определенными определенными ошибками, о которых некоторые вызывающие приложения хотели бы знать?).Вместо этого использование по крайней мере
except Error:
или в этом случае предпочтительноexcept OSError:
считается намного лучшей практикой. Быстрый анализ всех модулей Python, которые я установил, дал мне понять, что более 10% всехexcept ...: pass
операторов перехватывают все исключения, так что это все еще частый шаблон в программировании на Python.Вывод класса исключения, который не добавляет новое поведение (например, в
scipy
):Точно так же классы, предназначенные как абстрактный базовый класс, часто имеют явные пустые
__init__
или другие методы, которые должны наследовать подклассы. (напримерpebl
)Тестирование этого кода выполняется правильно для нескольких тестовых значений, не заботясь о результатах (из
mpmath
):В определениях классов или функций часто строка документа уже существует в качестве обязательного оператора, выполняемого как единственная вещь в блоке. В таких случаях блок может содержать
pass
в дополнение к строке документации, чтобы сказать: «Это действительно предназначено для того, чтобы ничего не делать». Например, вpebl
:В некоторых случаях
pass
используется как заполнитель, чтобы сказать: «Этот метод / класс / if-block / ... еще не был реализован, но это будет место, где это сделать», хотя я лично предпочитаюEllipsis
литерал...
для того, чтобы строго разграничить это и преднамеренное «без операции» в предыдущем примере. ( Обратите внимание, что литерал Ellipsis является допустимым выражением только в Python 3 ).Например, если я пишу модель широкими штрихами, я мог бы написать
где другие могут иметь
перед
в качестве напоминания, чтобы заполнить
update_agent
функцию на более позднем этапе, но уже запустить некоторые тесты, чтобы увидеть, ведет ли остальная часть кода, как задумано. (Третий вариант для этого случая:raise NotImplementedError
это полезно, в частности, для двух случаев: либо «Этот абстрактный метод должен быть реализован каждым подклассом, нет универсального способа определить его в этом базовом классе» , либо «Эта функция с это имя еще не реализовано в этом выпуске, но именно так будет выглядеть его подпись » )источник
Помимо его использования в качестве заполнителя для нереализованных функций, он
pass
может быть полезен при заполнении оператора if-else («Явный лучше, чем неявный».)Конечно, в этом случае можно было бы использовать
return
вместо назначения, но в тех случаях, когда желательна мутация, это работает лучше всего.Использование
pass
здесь особенно полезно, чтобы предупредить будущих сопровождающих (включая вас!) О том, чтобы не ставить лишние шаги за пределами условных операторов. В приведенном выше примереflag
устанавливается в двух конкретно упомянутых случаях, но не вelse
-case. Без использованияpass
будущий программист может выйтиflag = True
за пределы условия - таким образом, устанавливаяflag
во всех случаях.Другой случай с шаблонной функцией, часто видимой внизу файла:
В некоторых файлах было бы неплохо оставить это там,
pass
чтобы потом было легче редактировать, и сделать явным, что ничего не произойдет, когда файл будет запущен сам по себе.Наконец, как уже упоминалось в других ответах, может быть полезно ничего не делать при обнаружении исключения:
источник
flag = False
передif ... elif
блоком, чтобы впоследствии избежать неясных ошибок «NameError: name 'flag' notfined». Что касается второго примера, кажется, что bizzar приходится добавлятьif __name__ == "__main__": pass
к большинству файлов Python, которые ничего не делают при непосредственном выполнении (что имеет место при написании модульного кода). При Python> = 3.0 вы должны использовать...
(Ellipsis) вместо того,pass
чтобы указывать блоки «закончить позже».Лучший и самый точный способ думать
pass
- это способ явно сказать переводчику ничего не делать. Таким же образом следующий код:означает «если я вызову функцию foo (x, y), суммирую два числа, которые представляют метки x и y, и верну результат»,
означает «Если я вызываю функцию bar (), то ничего не делаю».
Другие ответы довольно правильные, но они также полезны для нескольких вещей, которые не включают места.
Например, в коде, над которым я работал совсем недавно, необходимо было разделить две переменные, и делитель мог быть равен нулю.
очевидно, выдаст ZeroDivisionError, если b равно нулю. В этой конкретной ситуации оставление c в качестве нуля было желательным поведением в случае, когда b было равно нулю, поэтому я использовал следующий код:
Другое, менее стандартное использование - удобное место для установки точки останова для вашего отладчика. Например, я хотел, чтобы часть кода врезалась в отладчик на 20-й итерации оператора for ... in. Так:
с точкой останова на проходе.
источник
def bar(): pass
не делает "абсолютно ничего". Это все еще возвращаетсяNone
, неявно.Обычный вариант использования, где его можно использовать «как есть», это переопределение класса только для создания типа (который в остальном совпадает с суперклассом), например
Таким образом, вы можете поднять и поймать
Error
исключения. Здесь важен тип исключения, а не содержание.источник
pass
в Python в основном ничего не делает, но в отличие от комментария он не игнорируется интерпретатором. Таким образом, вы можете воспользоваться этим во многих местах, сделав его заполнителем:1: Может использоваться в классе
2: можно использовать в цикле и условных выражениях:
3: Может использоваться в функции:
pass
в основном используется, когда программист не хочет давать реализацию в данный момент, но все еще хочет создать определенный класс / функцию / условный оператор, который можно будет использовать позже. Поскольку интерпретатор Python не допускает пустой или не реализованный оператор класса / функции / условия, он выдает ошибку:pass
можно использовать в таких сценариях.источник
Вы можете сказать, что pass означает операцию NOP (No Operation). После этого примера вы получите ясную картину:
Программа C
Теперь, как вы напишите это на Python:
Но ваш код выдаст ошибку, потому что для него требуется блок с отступом после elif . Вот роль ключевого слова pass .
Теперь я думаю, что вам ясно.
источник
&&
оператор не существует в PythonМне нравится использовать его при заглушении тестов. Я часто осознаю, что я хотел бы проверить, но не знаю, как это сделать. Пример тестирования выглядит так, как предложил sebastian_oe
источник
assert False
assert 0
Пропуск заявление ничего не делает. Он может использоваться, когда оператор синтаксически требуется, но программа не требует никаких действий.
источник
Честно говоря, я думаю, что официальные документы Python описывают это довольно хорошо и приводят несколько примеров:
источник
как сказано в книге, я использую ее только как временный заполнитель, т. е.
а затем заполните сценарий, в котором
var == 2000
источник
Pass ссылается на ignore .... так просто, как есть .... если данное условие истинно, а следующий оператор - pass, он игнорирует это значение или итерацию и переходит к следующей строке ..... Пример
Вывод: печатает все нечетные числа от 1 до 100
Это потому, что модуль четного числа равен нулю, следовательно, он игнорирует число и переходит к следующему числу, так как модуль нечетных чисел не равен нулю, остальная часть цикла выполняется и печатается
источник
SyntaxError
. Кроме того, это не очень хорошее применение,pass
потому что вы могли бы просто сделатьfor i in range(1,100):print(i)if i%2else""
Вот пример, где я извлекал определенные данные из списка, где у меня было несколько типов данных (это то, что я бы назвал в R - извините, если это неправильная номенклатура), и я хотел извлечь только целые / числовые и НЕ символьные данные ,
Данные выглядели так:
Я хотел удалить все алфавитные символы, поэтому я сделал так, чтобы машина делала это путем поднабора данных и «передавая» алфавитные данные:
источник
Оператор pass в Python используется, когда оператор требуется синтаксически, но вы не хотите, чтобы какая-либо команда или код выполнялись.
Оператор pass является нулевой операцией; ничего не происходит, когда он выполняется. Этот проход также полезен в тех местах, где ваш код в конечном итоге будет отправлен, но еще не написан (например, в заглушках, например):
`Пример:
Это даст следующий результат:
Предыдущий код не выполняет никаких операторов или кодов, если значение буквы равно «h». Оператор pass полезен, когда вы создали блок кода, но он больше не требуется.
Затем вы можете удалить операторы внутри блока, но оставить блок с оператором pass, чтобы он не мешал другим частям кода.
источник
pass используется, чтобы избежать ошибок отступа в python. Если мы возьмем такие языки, как c, c ++, java, они будут иметь такие скобки, как
Но в python он использовал отступы вместо фигурных скобок, поэтому, чтобы избежать таких ошибок, мы используем pass. Помните, как вы играли в викторину и
Пример программы,
источник