Если вам не нужно значение переменной, присвойте его специальной переменной _.
Что касается Python, на самом деле в _ нет ничего особенного; это просто еще одно официальное имя-идентификатор, как и любое другое.
Однако для большинства инструментов в стиле «lint» (надеюсь, включая PyDev) — и, что более важно, для читателей — это имеет особое значение: «Мне не нужна эта переменная, я помещаю сюда что-то только потому, что API/ синтаксис/все, что требуется". Это означает, что они не будут предупреждать вас о том, что вы не используете его.
So:
_, content = myfunc()[2]
И да, вы правы, это часто более читабельно, чем myfunc()[2][1]. Кроме того, это поможет вам обнаружить еще несколько ошибок — если myfunc()[2] не имеет ровно двух членов, то присваивание кортежа будет сгенерировано, а [1] — нет.
Очень, очень редко это не очень хорошая идея, потому что значение — это то, что вы хотите как можно скорее удалить сборщиком мусора, и привязка его к _ вместо того, чтобы просто не привязывать его вообще (например, через [2][1]), задерживает это.
Более серьезно, это конфликтует с другой идиомой, которая также специально использует _: Код, который использует gettext для интернационализации, обычно делает:
import gettext
_ = gettext.gettext
Или, что то же самое:
from gettext import gettext as _
Очевидно, что вы не можете использовать _ одновременно как ярлык gettext и как бессмысленный идентификатор. (На самом деле вам можно это сойти с рук, потому что значение gettext привязано на глобальном уровне модуля, а бессмысленный идентификатор следует использовать только внутри тел функций… но все же, это очень плохая идея — пытаться , потому что в какой-то момент вы в конечном итоге будете использовать gettext _ в функции после того, как присвоите локальное значение, которое затеняет его.) Ничто не заставляет вас использовать _ в любом случае, но если вы используете что-то еще, вы, вероятно, сбить с толку читателей (и, возможно, тот же самый инструмент анализа, который вы хотите успокоить в первую очередь). Итак, вы должны решить, какой из них важнее для вас в любом конкретном проекте. (И обычно, если вы используете gettext, это будет более важным.)
Если вы неоднократно вызываете myfunc и избавляетесь от некоторых значений, вы можете подумать о написании функции-оболочки:
def mywrapperfunc():
_, content = myfunc()[2]
return content
Тогда ваш код может просто сделать:
content = mywrapperfunc()
Это имеет ряд преимуществ:
- Это, очевидно, легче читать, чем все, что требует от вас помнить, что вам нужна вторая половина кортежа, который находится в индексе 2 последовательности, возвращаемой
myfunc.
- Это дает вам место, чтобы поместить красивое имя (надеюсь, лучше, чем
mywrapperfunc) и/или комментарии/строки документации, если это не тривиально.
- Это означает, что если вы позже измените
myfunc так, чтобы нужное значение теперь находилось в индексе 3 вместо 2, и вторым членом кортежа из 3 элементов вместо кортежа из 2 элементов, вам нужно только изменить mywrapperfunc вместо 20 различных строки кода.
- Это также означает, что если вы позже захотите использовать конфликтующую идиому
_ (например, для i18n вашего кода с gettext), вам нужно будет изменить ее только в одном месте.
Одно примечание: в интерактивном интерпретаторе _ действительно имеет особое значение: оно связано с результатом последней интерактивной команды. Но это не значит, что вы не можете использовать _ в интерактивном интерпретаторе. (На самом деле, там даже лучше, потому что все, что вы там прячете, тут же перезаписывается, поэтому очень редкая проблема GC не возникает.)
person
abarnert
schedule
19.12.2012