2009-07-30 9 views
7

estoy encontrando a mí mismo escribiendo lo siguiente mucho (el desarrollo de Django, si es relevante):¿Hay un atajo de Python para verificar y asignar variables?

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

Alternativamente, y más comúnmente (es decir, la creación de una lista de parámetros)

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

Es Hay un atajo que simplemente no sé que simplifica esto? Algo con el tipo de lógica myVariable = assign_if_exists(testVariable)?

Respuesta

25

Suponiendo que quiere dejar myVariable sin tocar a su valor anterior en el caso "no existe",

myVariable = testVariable or myVariable 

aborda el primer caso, y

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

se ocupa de la segundo. Sin embargo, tampoco tiene mucho que ver con "existir" (que no es un concepto de Python ;-): el primero es verdadero o falso, el segundo acerca de la presencia o ausencia de una clave en una colección.

+0

El primer idioma es realmente agradable: el otro día me enteré de esto. – jkp

+0

Gracias, perfecto. Me pregunto cómo me las arreglé para perder este azúcar sintáctico hasta ahora. –

7

La primera instancia se indica de manera extraña ... ¿Por qué establecer un valor booleano en otro booleano?

Lo que puede significar es fijar myVariable a testVariable cuando testVariable no es una cadena de longitud cero o no Ninguno o no algo que sucede a evaluar en Falso.

Si es así, yo prefiero las formulaciones más explícitas

myVariable = testVariable if bool(testVariable) else somethingElse 

myVariable = testVariable if testVariable is not None else somethingElse 

Al indexar en un diccionario, basta con utilizar get.

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