GOOGLE ADS

martes, 19 de abril de 2022

Declaración condicional dentro de un caso de coincidencia

¿Es posible tener una declaración condicional como caso para una declaración de coincidencia en Python?

Trabajando algo como esto:

test = 'Aston Martin'
makes = ['Aston Martin', 'Bentley']
match test:
case if test in makes:
print(True)
case _:
print(False)

Sé que match/case no busca algo con valor booleano True, pero parece que sería útil tenerlo para escalar cosas.

Traté de hacerlo como una función para que pueda devolver la coincidencia exacta:

test = 'Aston Martin'
makes = ['Aston Martin', 'Bentley']
def return_bool(item, lists):
if item in lists:
return item
else:
return 'notmatching'
match test:
case return_bool(test, makes):
print(True)
case _:
print(False)

Esto tampoco funcionó. Creo que está esperando una salida de formato, como - str(x)

Lo siento si mi explicación/vocabulario no es correcto, por favor corrígeme a medida que aprendo a medida que avanzo.


Solución del problema

Como señalan los comentarios, el código que proporcionó parece más adecuado para if/elif, sin embargo, se puede lograr porque matchadmite las llamadas "cláusulas de protección".

test = 'Aston Martin'
makes = ['Aston Martin', 'Bentley']
match test:
case test if test in makes:
print(True)
case _:
print(False)

Esto funciona incluso en los casos en makesque no hay una secuencia fija. Si makeses realmente solo un sustituto de una secuencia fija, entonces también podría usar

test = 'Aston Martin'
match test:
case 'Aston Martin' | 'Bentley':
print(True)
case _:
print(False)

Tenga en cuenta que no puede hacer esto

test = 'Aston Martin'
makes = ['Aston Martin', 'Bentley']
match test:
case makes:
print(True)
case _:
print(False)

ya que esto simplemente siempre coincidirá con el primer caso, sobrescribiendo makescon test.

No hay comentarios:

Publicar un comentario

Regla de Firestore para acceder a la generación de subcolección Permisos faltantes o insuficientes

Tengo problemas con las reglas de Firestore para permitir el acceso a algunos recursos en una subcolección. Tengo algunos requests document...