2009-07-30 7 views
7

jestem znalezieniem się wpisując następujące partii (opracowanie dla Django, jeśli jest to stosowne):Czy istnieje skrót Pythona do sprawdzania zmiennych i przypisywania?

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

Alternatywnie, i częściej (czyli budowanie listy parametrów)

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

Czy tam skrót, o którym nie wiem, upraszcza to? Coś w rodzaju logiki myVariable = assign_if_exists(testVariable)?

Odpowiedz

25

Zakładając chcesz zostawić myVariable nietknięty do jego poprzedniej wartości w „nie istnieje” wypadku

myVariable = testVariable or myVariable 

oferty z pierwszym przypadku i

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

zajmuje się Drugi. Nie ma to jednak wiele wspólnego z "istnieć" (co nie jest koncepcją Pythona ;-): pierwsza dotyczy prawdy lub fałszu, druga dotyczy obecności lub nieobecności klucza w kolekcji.

+0

Pierwszy idiom jest naprawdę fajny: dowiedziałem się o tym dopiero niedawno. – jkp

+0

Dzięki, doskonale. Ciekawe, jak udało mi się jak dotąd przegapić ten cukier syntaktyczny! –

7

Pierwsza instancja jest określona dziwnie ... Dlaczego ustawić wartość logiczną na inną wartość logiczną?

Co może oznaczać ustawienie zmiennej myVaria na zmienną testową, gdy zmienna testVariable nie jest łańcuchem o zerowej długości, lub nie Brak lub nie jest czymś, co dzieje się z oceną Fałsz.

Jeśli tak, wolę bardziej wyraźnych sformułowań

myVariable = testVariable if bool(testVariable) else somethingElse 

myVariable = testVariable if testVariable is not None else somethingElse 

podczas indeksowania w słowniku, po prostu użyć get.

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