54 votes

Python - est-il un "don't care" symbole de tuple les affectations?

Étant donné une chaîne de caractères "VAR=valeur" je veux diviser (seulement) à la première '=' signe (< valeur > peut contenir plus d' '=' des signes), quelque chose comme ceci:

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

Est-il un moyen de ne PAS déclarer une variable "sep"? Comme ceci (que vient de faire la syntaxe):

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

Juste pour être complet, je suis cibler Python 2.6 v

61voto

Alex Martelli Points 330805

_ est en effet un choix très populaire pour "un nom qui n'a pas d'importance", c'est un nom légal, visuellement discrète, etc. Cependant, parfois, ces qualités peuvent vous gêner. Par exemple, la GNU gettext module I18N et L10N, qui fait partie de Python standard library, idiomatique utilise _ très différemment, avec les expressions idiomatiques telles que...:

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

pour marquer et de traduire tous les littéraux de chaîne de messages dans le code (aussi exploitant la relative discrétion visuelle de l' _('...'). Évidemment, le code en utilisant ce module et de l'idiome ne devrait pas être aussi à l'aide de _ , signifie quelque chose de complètement différent (un"ne se soucient pas de nom").

Ainsi, une deuxième alternative utile peut-être de consacrer le nom unused d'indiquer de telles "don't care" des situations dans un visuel plus explicite. Google python style guide recommande l'utilisation de _ ou un préfixe d' unused_ - ceux-ci peuvent être un peu verbeux, mais a tendance à être très claire, par exemple:

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

fait de cristal clair qu' person_data est un trois-point de la séquence (probablement un tuple) et l'article que vous êtes en sauter et ne pas l'utiliser du tout) est le nom de famille (parce que vous souhaitez imprimer un message amical "Bonjour, M. Alex!" ou "Bonjour, Miss Piggy!" ;-). (pylint et outils similaires peut vous avertir si vous n'avez pas utilisé variables nommées autrement qu' _ ou unused_..., et bien sûr aussi de vous avertir si jamais vous ne utilisez une variable nommée unused_something!-).

16voto

SilentGhost Points 79627

On y est presque:

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

_ est classiquement considérée comme une n'avez pas de soins de variable.

4voto

DNS Points 17577

Il n'y a rien d'officiel dans la langue pour que; vous pouvez simplement utiliser tout jeter variable. Comme ce qui concerne les normes, j'ai vu des traits de soulignement, occasionnellement, en Python et en d'autres langues. Le seul problème c'est que le trait de soulignement est utilisé comme un alias pour gettext lors de la localisation. Mais si vous ne faites pas de localisation, ou ne sont pas en utilisant le global contraignant pour elle, alors soulignent devrait fonctionner correctement.

3voto

mg. Points 3729

Vraiment étrange question, parce que vous pouvez le faire simplement:

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

et ne vous souciez pas des _ variable, mais _ est juste un nom qu' sep, comme var ou value. Par la façon d'utiliser str.split

>>> var, value = "VAR=value".split('=')
>>> var, value
('VAR', 'value')
>>> 

2voto

froadie Points 15184

Pourquoi n'utilisez-vous pas 'VAR=value'.split('=') à la place? Qui méprise le délimiteur.

EDIT (pour accueillir Cristi de l'exemple dans le commentaire):

De la Plongée en Python:

Astuce: anystring.split(séparateur, 1) est un technique utile lorsque vous voulez recherche une chaîne de caractères d'une chaîne et puis, avec tout ce qui est avant le substring (qui se termine dans la première élément de la liste retournée) et tout ce qui est après elle (qui se termine dans le deuxième élément).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X