Как элегантно игнорировать некоторые возвращаемые значения функции в Python?
иногда функция дает возвращаемое значение, которое вы просто хотите отбросить, а не отправлять в выходной поток. Каков был бы элегантный способ справиться с этим?
обратите внимание, что мы говорим о функции, которая возвращает то, что нельзя изменить.
def fn():
return 5
Я лично использовал null
раньше, но я ищу более подходящие для Python образом:
null = fn()
2 ответов
стандартный способ показать это, чтобы присвоить результаты, которые вы не хотите _
. Например, если функция возвращает два значения, но вы хотите только первое, сделайте следующее:
value, _ = myfunction(param)
большинство линтеров Python распознают использование _
а не жаловаться на неиспользуемые переменные.
Если вы хотите игнорировать все возвраты, то просто не назначайте ничего; Python ничего не делает с результатом, если вы не скажете ему. Печать результата-это функция Только оболочка Python.
мне очень нравится идея присвоения null-но она имеет неожиданный побочный эффект:
>>> print divmod(5, 3)
(1, 2)
>>> x, null = divmod(5, 3)
>>> print null
2
для тех, кто кодирует в основном на Python, это, вероятно, не проблема: null должен быть таким же мусорным значением, как _.
однако, если вы переключаетесь между другими языками, такими как Javascript, вполне возможно случайно написать сравнение с null вместо None. Вместо того, чтобы выплевывать обычную ошибку о сравнении с неизвестной переменной, Python просто молча примет это, и теперь вы получаете истинные и ложные условия, которые вы совершенно не ожидаете... это такая ошибка, когда вы смотрите на код в течение часа и не можете понять, что неправильно, пока он внезапно не ударит вас, и вы почувствуете себя идиотом.
очевидное исправление тоже не работает:
>>> x, None = divmod(5, 3)
File "<stdin>", line 1
SyntaxError: cannot assign to None
...что действительно разочаровывает. Python (и любой другой язык на планете) позволяет все параметров имплицитно выбрасывается, независимо от того, сколько переменных возвращается:
>>> divmod(5, 3)
...но!--12-->явно выбрасывание параметров, назначая их None не допускается?
кажется глупым интерпретатором Python характеризовать присвоение None как синтаксическую ошибку, а не преднамеренный выбор с однозначным результатом. Кто-нибудь может придумать этому объяснение?