Python - есть ли символ "не волнует" для присвоений кортежей?
Учитывая строку "VAR = значение", я хочу разбить ее (только) на знаке first '=' (< значение > может содержать больше знаков "=" ), что-то вроде этого
var, sep, value = "VAR=value".partition('=')
Есть ли способ НЕ объявить переменную 'sep'? Подобно этому (только что составленному синтаксису):
var, -, value = "VAR=value".partition('=')
Просто для полноты, я нацелен на Python v 2.6
Ответы
Ответ 1
_
действительно очень популярный выбор для "имени, которое не имеет значения" - это юридическое имя, визуально ненавязчивое и т.д. Однако иногда эти качества могут помешать вам. Например, модуль GNU gettext для I18N и L10N, который является частью стандартной библиотеки Python, идиоматически использует _
очень по-другому, с идиомы, такие как...:
_ = gettext.gettext
# ...
print _('This is a translatable string.')
чтобы отметить и перевести все текстовые сообщения в коде (также используя относительную визуальную ненавязчивость _('...')
. Очевидно, что любой код, использующий этот модуль и идиому, также не должен использовать _
для обозначения чего-то совершенно другого ( "a do not care name" ).
Таким образом, второй полезной альтернативой может быть присвоение имени unused
, чтобы указать такие ситуации "не заботьтесь" визуально более явным образом. Google руководство по стилю python рекомендует использовать либо _
, либо префикс unused_
- последний может быть немного подробным, но, как правило, очень ясно, например:
name, unused_surname, salutation = person_data
print "Hello, %s %s!" % (salutation, name)
делает кристально чистым, что person_data
представляет собой последовательность из трех элементов (возможно, кортеж), а элемент, который вы пропускаете (и не используете вообще), является фамилией (потому что вы хотите напечатать дружественное сообщение типа "Привет, мистер Алекс!" Или "Привет, мисс Пигги!";-). (pylint
и аналогичные инструменты могут вас предупредить, если у вас есть неиспользуемые переменные с именем, отличным от _
или unused_...
, и, конечно же, также предупреждайте вас, если вы когда-либо используете переменную с именем unused_something
! -).
Ответ 2
Почти там:
var, _, value = "VAR=value".partition('=')
_
обычно считается переменной, не требующей ухода.
Ответ 3
Для этого нет никакого официального языка; вы можете просто использовать любую отбрасываемую переменную. Что касается стандартов, я видел, как подчеркивания, используемые иногда на Python и других языках. Единственная проблема заключается в том, что подчеркивание используется как псевдоним для gettext
при локализации. Но если вы не выполняете локализацию или не используете глобальную привязку для нее, то подчеркивание должно работать нормально.
Ответ 4
Действительно странный вопрос, потому что вы можете сделать только:
var, _, value = s.partition(sep)
и не заботится о переменной _
, но _
- это просто имя sep
, как var
или value
. Кстати, используйте str.split
>>> var, value = "VAR=value".split('=')
>>> var, value
('VAR', 'value')
>>>
Ответ 5
Почему бы вам не использовать 'VAR=value'.split('=')
? Это игнорирует разделитель.
РЕДАКТИРОВАТЬ (для примера Cristi в комментарии):
От Дайвинг в Python:
Совет: anystring.split(разделитель, 1) является полезную технику, когда вы хотите поиск строки для подстроки и то работайте со всем до подстрока (которая заканчивается в первой элемент возвращаемого списка) и все после него (что заканчивается второй элемент).
Ответ 6
-
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)
.
Ответ 7
_ обычно используется как имя для вас dont care * Например, в кортеже, содержащем имя, фамилию и псевдоним в тот момент, когда нас интересуют только имя и фамилия, может использовать _, чтобы указать, что имя не важно на данный момент:
data = ('John', 'Mate', 'Little John')
name, surname, _ = data
Ответ 8
Как говорили другие, подчеркивание (_
) является стандартом. Но если подчеркивание используется для переводов, я думаю, что двойной символ подчеркивания - лучшая альтернатива.
var, __, value = "VAR=value".partition('=')
Лучше, чем эти:
var, unused, value = "VAR=value".partition('=')
var, unused_del, value = "VAR=value".partition('=')
var, _del, value = "VAR=value".partition('=')
Ответ 9
Существует также возможность использования индексов:
a, b = my_list[0, 2]