110 votes

Est-ce que Python a une fonction « ou égale » comme ||= dans Ruby ?

Dans la négative, quelle est la meilleure façon de procéder ?

En ce moment, je fais (pour un projet django) :

if not 'thing_for_purpose' in request.session:
    request.session['thing_for_purpose'] = 5

Mais c'est plutôt gênant. Dans Ruby, ce serait :

request.session['thing_for_purpose'] ||= 5

ce qui est beaucoup plus agréable.

227voto

velotron Points 484

La réponse de Jon-Eric est bonne pour les dicks, mais le titre cherche un équivalent général à l'opérateur ||= de .

Une façon courante de faire quelque chose comme ||= en Python est

x = x or new_value

20voto

Jon-Eric Points 7749

dict a setdefault().

Donc si request.session est un dict :

request.session.setdefault('thing_for_purpose', 5)

10voto

Brian Hicks Points 1496

Définir une valeur par défaut est logique si vous le faites dans un intergiciel ou quelque chose, mais si vous avez besoin d'une valeur par défaut dans le contexte d'une requête :

request.session.get('thing_for_purpose', 5) # gets a default

bonus : voici comment vraiment faire un ||= en Python.

def test_function(self, d=None):
    'a simple test function'
    d = d or {}

    # ... do things with d and return ...

0voto

curtissv Points 49

En général, vous pouvez utiliser dict[key] = dict.get(key, 0) + val.

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