mi sono imbattuto in un'espressione interessante in Ruby:C'è qualche espressione in python che simile al rubino del || =
a ||= "new"
Ciò significa che se una non è definito, il valore "nuovo" sarà assegnato a un; altrimenti, a sarà lo stesso com'è. È utile quando si esegue una query DB. Se il valore è impostato, non desidero attivare un'altra query DB.
così ho provato la mentalità simile in Python:
a = a if a is not None else "new"
E 'fallito. Lo penso perché non puoi fare "a = a" in Python, se a non è definito.
Quindi le soluzioni che posso venire fuori stanno controllando i locali() e globali(), o utilizzando provare ... ad eccezione di espressione:
myVar = myVar if 'myVar' in locals() and 'myVar' in globals() else "new"
o
try:
myVar
except NameError:
myVar = None
myVar = myVar if myVar else "new"
Come possiamo vedere , le soluzioni non sono così eleganti. Quindi mi piacerebbe chiedere, c'è un modo migliore per farlo?
nota che l'uso usuale di 'variabile || = valore' è quello di impostare un valore predefinito su una variabile già definita, utilizzandolo per definire variabili che possono o non possono esistere sono scarse pratiche IMHO. – tokland
La soluzione try-except è, credo, la più Pythonic. Certo, non è così conciso come un singolo operatore, ma è chiaro e leggibile. –
'myVar = myVar se myVar else" new "' - sii consapevole che questo è python e non ruby, e molte cose sono considerate false in un contesto booleano –