2009-07-30 7 views
7

Sto trovando me stesso digitando il seguente molto (in via di sviluppo per Django, se questo è rilevante):Esiste una scorciatoia Python per il controllo e l'assegnazione delle variabili?

if testVariable then: 
    myVariable = testVariable 
else: 
    # something else 

In alternativa, e più comunemente (vale a dire la costruzione di una lista di parametri)

if 'query' in request.POST.keys() then: 
    myVariable = request.POST['query'] 
else: 
    # something else, probably looking at other keys 

Is c'è una scorciatoia che non conosco, semplifica questo? Qualcosa con il tipo di logica myVariable = assign_if_exists(testVariable)?

risposta

25

Supponendo che si vuole lasciare myVariable intatto al suo valore precedente nel caso "non esiste",

offerte
myVariable = testVariable or myVariable 

con il primo caso, e

offerte
myVariable = request.POST.get('query', myVariable) 

con il il secondo. Né ha molto a che fare con "esiste", però (che è difficilmente un concetto di Python ;-): il primo riguarda il vero o il falso, il secondo sulla presenza o l'assenza di una chiave in una raccolta.

+0

Il primo idioma è davvero bello: l'ho scoperto solo l'altro giorno. – jkp

+0

Grazie, perfetto. Mi chiedo come sono riuscito a perdere questo zucchero sintattico finora! –

7

La prima istanza è dichiarata stranamente ... Perché impostare un booleano su un altro booleano?

Ciò che si può significare è impostare myVariable su testVariable quando testVariable non è una stringa di lunghezza zero o None o non qualcosa che accade per valutare su False.

Se è così, preferisco le formulazioni più esplicite

myVariable = testVariable if bool(testVariable) else somethingElse 

myVariable = testVariable if testVariable is not None else somethingElse 

durante l'indicizzazione in un dizionario, è sufficiente utilizzare get.

myVariable = request.POST.get('query',"No Query") 
Problemi correlati