Python - есть ли символ "все равно" для присваивания кортежей? - PullRequest
39 голосов
/ 30 апреля 2010

Учитывая строку "VAR = value", я хочу разделить ее (только) по знаку first '=' ( может содержать больше символов '='), что-то вроде этого:

var, sep, value = "VAR=value".partition('=')

Есть ли способ НЕ объявлять переменную 'sep'? Вот так (только что составил синтаксис):

var, -, value = "VAR=value".partition('=')

Просто для полноты, я нацеливаюсь на Python v 2.6

Ответы [ 9 ]

45 голосов
/ 30 апреля 2010

_ действительно очень популярный выбор для «имени, которое не имеет значения» - это законное имя, визуально ненавязчивое и т. Д. Однако иногда эти самые качества могут помешать вам. Например, модуль GNU gettext для I18N и L10N, который является частью стандартной библиотеки Python, идиоматически использует _ совсем по-другому, с такими идиомами, как ...:

_ = gettext.gettext
# ...
print _('This is a translatable string.')

для маркировки и перевода всех буквенно-строковых сообщений в коде (также с использованием относительной визуальной ненавязчивости _('...'). Очевидно, что любой код, использующий этот модуль и идиому, также не должен использовать _ для обозначения чего-то совершенно другого («имя пофиг»).

Таким образом, второй полезной альтернативой может быть выделение имени unused для обозначения таких «безразличных» ситуаций визуально более явным образом. Google Python Style Guide рекомендует использовать либо _, либо префикс из unused_ - последний может быть немного многословным, но, как правило, очень четким, например ::

name, unused_surname, salutation = person_data
print "Hello, %s %s!" % (salutation, name)

делает кристально ясным, что person_data - это последовательность из трех элементов (вероятно, кортеж), а элемент, который вы пропускаете (и вообще не используете) - это фамилия (потому что вы хотите напечатать дружеское сообщение типа " Здравствуйте, мистер Алекс! »Или« Здравствуйте, мисс Пигги! »;-). (pylint и аналогичные инструменты могут предупреждать вас, если у вас есть неиспользуемые переменные с именами, отличными от _ или unused_..., и, конечно, также предупреждают вас, если вы когда-либо do используете переменную с именем unused_something! -.)

14 голосов
/ 30 апреля 2010

Почти там:

var, _, value = "VAR=value".partition('=')

_ условно считается переменной безразличия.

4 голосов
/ 30 апреля 2010

В этом языке нет ничего официального; Вы можете просто использовать любую одноразовую переменную. Что касается стандартов, я видел подчеркивания, иногда используемые в Python и других языках. Единственная проблема заключается в том, что подчеркивание используется в качестве псевдонима для gettext при локализации. Но если вы не делаете локализацию или не используете глобальную привязку для нее, подчеркивание должно работать нормально.

3 голосов
/ 30 апреля 2010

Действительно странный вопрос, потому что вы можете сделать только:

var, _, value = s.partition(sep)

и не волнует переменная _, но _ это просто имя как sep, как var или value. Кстати используйте str.split

>>> var, value = "VAR=value".split('=')
>>> var, value
('VAR', 'value')
>>> 
2 голосов
/ 30 апреля 2010
  • У Python нет синтаксиса, чтобы избежать присваивания при распаковке и тому подобное.

  • Как уже упоминалось, существует соглашение об использовании _ для переменных, которые вас не интересуют. Это довольно широко используется и понимается, но лично я думаю, что он используется недостаточно. Если вы говорите var, _, value = "VAR=value".partition('='), вы должны знать, что происходит, чтобы знать, что такое _ и почему вас это не волнует, когда вы читаете код. Если вы говорите var, sep, value, вы одновременно документируете. Это не очень важно для str.partition, но я видел _, _, name, _, city, _ = some_weird_function() раньше и нашел его менее полезным, чем если бы все было распаковано с полезными именами.

  • Вы можете технически использовать str.split здесь, если хотите. var, value = "foo=bar=baz".split("=", 1).

2 голосов
/ 30 апреля 2010

Почему бы вам не использовать 'VAR=value'.split('=') вместо этого? Это игнорирует разделитель.

РЕДАКТИРОВАТЬ (чтобы учесть пример Кристи в комментарии):

С Погружение в Python :

Подсказка: любая строка .split ( разделитель , 1) является полезная техника, когда вы хотите искать строку для подстроки и затем работать со всем до подстрока (которая заканчивается в первом элемент возвращаемого списка) и все после этого (которое заканчивается второй элемент).

1 голос
/ 24 июня 2013

_ обычно используется как имя для вас все равно * Например, в кортеже, содержащем имя, фамилию и псевдоним, в момент, когда нас интересуют только имя и фамилия, может используйте _, чтобы указать, что имя не имеет значения в данный момент:

data = ('John', 'Mate', 'Little John')
name, surname, _ = data
0 голосов
/ 25 мая 2017

Существует также возможность использования индексов:

a, b = my_list[0, 2]
0 голосов
/ 29 мая 2015

Как уже говорили другие, подчеркивание (_) является стандартом. Но если для перевода используется подчеркивание, я думаю, что двойное подчеркивание - лучшая альтернатива.

var, __, value = "VAR=value".partition('=')

Лучше, чем эти:

var, unused, value = "VAR=value".partition('=')

var, unused_del, value = "VAR=value".partition('=')

var, _del, value = "VAR=value".partition('=')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...