J'utiliserais
x = 'default' if not x else x
Bien plus court que toutes les alternatives proposées ici, et allant droit au but. Il faut lire : "mettre x par défaut si x n'est pas mis sinon le garder comme x". Si vous avez besoin de None
, 0
, False
o ""
pour être des valeurs valides, vous devrez modifier ce comportement, par exemple :
valid_vals = ("", 0, False) # We want None to be the only un-set value
x = 'default' if not x and x not in valid_vals else x
Ce genre de choses ne demande qu'à être transformé en une fonction que l'on peut utiliser partout facilement :
setval_if = lambda val: 'default' if not val and val not in valid_vals else val
à ce moment-là, vous pouvez l'utiliser comme :
>>> x = None # To set it to something not valid
>>> x = setval_if(x) # Using our special function is short and sweet now!
>>> print x # Let's check to make sure our None valued variable actually got set
'default'
Enfin, si la notation infixe de Ruby vous manque vraiment, vous pouvez surcharger ||=|
(ou quelque chose de similaire) en suivant les conseils de ce gars : http://code.activestate.com/recipes/384122-infix-operators/
1 votes
Il ne l'active pas s'il n'est pas activé - il l'active si sa valeur actuelle est fausse (
false
ounil
). Il est vrai que cette distinction est plus importante dans les langages qui, par exemple, considèrent 0 et "" comme faux, mais il n'en reste pas moins que la distinction est plus importante dans les langages qui, par exemple, considèrent 0 et "" comme faux.0 votes
Quel est le cas d'utilisation de cet opérateur ruby ?
1 votes
La façon de le faire serait d'utiliser un try except NameError comme indiqué par phihag, mais cela n'a pas tellement de sens en Python comme indiqué par tout le monde ici. En Ruby, c'est plus utile en raison de la façon dont les gens passent des blocs de code arbitraires à exécuter à l'intérieur d'une fonction. La fonction cible peut alors avoir besoin de définir une variable qui n'a pas été initialisée dans le bloc étranger qu'elle a exécuté. De tels cas n'existent pas en Python.