¿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 match
admite 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 makes
que no hay una secuencia fija. Si makes
es 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 makes
con test
.
No hay comentarios:
Publicar un comentario