Подтвердить что ты не робот

В python существует эквивалент "pass" для присваивания переменной

Я использую библиотечную функцию с именем get_count_and_price, которая возвращает 2-кортеж (count, price). Во многих местах я использую как время, так и цену. Однако в некоторых мне нужно только время или цена. Так что прямо сейчас, если мне нужен только счет, я назначаю (количество, цену) и оставляю цену неиспользованной.

Это отлично работает и не вызывает никаких проблем само по себе.

Однако...

Я использую Eclipse с PyDev, а новая версия 1.5 автоматически показывает ошибки и предупреждения. Одно из предупреждений, которое он показывает, это неиспользуемые переменные. В приведенном выше примере цена флага считается неиспользованной. Это великое поведение, и я действительно ценю, как PyDev делает это для меня. Тем не менее, я хотел бы пропустить задание на цену в целом. В идеале мне бы хотелось что-то вроде:

(count,None) = get_count_and_price()

Теперь, как мы все знаем, никто не может быть назначен. Есть ли что-то еще, что я мог бы сделать в этом случае?

Я знаю, что могу сделать что-то вроде

count = get_count_and_price()[0]

но я прошу только посмотреть, есть ли у кого-нибудь лучшие предложения.

4b9b3361

Ответ 1

Я думаю, что нет ничего плохого в использовании индекса [0], но иногда люди используют переменную "throwaway" _. Это фактически так же, как и любая другая переменная (с особым использованием в консоли), за исключением того, что некоторые пользователи Python решили, что это будет "выбросить" в качестве соглашения.

count, _  = get_count_and_price()

О проблеме PyDev вы должны просто использовать индекс [0] в любом случае. Но если вы действительно хотите использовать _, единственным решением является отключить предупреждения неиспользуемой переменной, если это вас беспокоит.

Ответ 2

Использование _ по отдельности может иметь некоторые проблемы (хотя в основном это нормально). По правилам стиля Python, которые я использую на работе, я обычно использую count, unused_price = ..., поскольку pylint настроен на игнорирование присвоений именам, начинающимся с unused_ (и вместо этого предупреждает об использовании любого такого имени bar!). Но я не знаю, как приказать PyDev вести себя таким образом!

Ответ 3

Если вы перейдете в окно Eclipse → Preferences..., вы можете указать, какие имена переменных PyDev должны игнорировать, если они не используются (я смотрю на новейший PyDev 1.5.X).

Если вы перейдете в PyDev → Редактор → Анализ кода и посмотрите на последнее поле, в котором говорится: "Не сообщайте неиспользуемую переменную, если имя начинается с"

Введите любые имена, которые вы хотите там, а затем используйте это имя, чтобы ограничить имена переменных, которые PyDev будет игнорировать неиспользуемые предупреждения.

По умолчанию похоже, что PyDev скрывает неиспользуемые предупреждения переменных для любых переменных, имена которых начинаются с "dummy", "_" или "unused".

Как сказал @TokenMacGuy ниже, я бы рекомендовал не использовать только "_", потому что он имеет особое значение в некоторых сценариях на Python (в частности, он используется в интерактивном интерпретаторе).

Ответ 4

Мы часто это делаем.

count, _ = get_count_and_price()

или

count, junk = get_count_and_price()

Ответ 5

Я бы скорее назвал его _price, по этим причинам:

  • Он разрешает конфликт с gettext и интерактивным приглашением, в котором используются _

  • Легко вернуться в price, если вам это нужно позже.

  • Как отмечали другие, ведущее подчеркивание уже имеет коннотацию "внутреннего" или "неиспользуемого" на многих языках.

Итак, ваш код будет выглядеть следующим образом:

(count, _price) = get_count_and_price()

Ответ 6

Я пойду после значка Некроманта.:)

Вы сказали, что используете PyDev. В PyDev (по крайней мере, в последних версиях - я не проверял, как далеко назад) любое имя переменной, начинающееся с "unused", будет освобождено от предупреждения "Неиспользуемая переменная". Другой инструмент статического анализа может все еще жаловаться, хотя (pyflakes делает - но, похоже, он все равно игнорирует это предупреждение в контексте распаковки).