come dovrei determinare quale dichiarazione if è stata attivata?
Esempio:
string = "hello"
if len(string) > 10:
print("over 10")
elif string == "hello":
print("String is equal to hello")
else:
pass
Voglio riscriverlo in modo che sia più "pythonic", sono arrivato così lontano
string = "hello"
if len(string) > 10 or string == "hello":
print("one of the if statements was triggered") # I want to determine which was triggered
else:
pass
È ciò che spero di realizzare anche possibile?
Grazie
risposte:
1 per risposta № 1IMO, non c'è nulla di sbagliato nell'istruzione if che usi.
Ma se vuoi essere intelligente puoi usare una lista di lambda
"S:
In [1]: string = "Hello"
In [2]: conditions = [lambda s: "Length is > 10" if len(s) > 10 else None,
...: lambda s: "String is "Hello"" if s == "Hello" else None]
Il conditions
sono funzioni anonime. Restituiscono una stringa che descrive la condizione o None
usando l'operatore ternario.
Questo è leggermente diverso dal tuo if
-indicazione in quanto prova tutti le condizioni.
Applichiamo le funzioni alla stringa, filtrando il None
valori:
In [3]: results = [r for r in [c(string) for c in conditions] if r is not None]
Il results
è un elenco di stringhe che descrivono le condizioni che si applicano alla stringa.
Stampiamo i risultati.
In [4]: for r in results:
...: print(r)
...:
String is "Hello"
Questo certamente fa buon uso delle possibilità offerte da Python.
Se tu considerassi questo Pythonic è una questione di gusti. :-) L'originale if
-la dichiarazione è più breve e probabilmente più facile da leggere! Soprattutto per chi è nuovo in Python.
Tuttavia, se vuoi testare un sacco di condizioni questo potrebbe essere un buon approccio al posto di un enorme elenco di dichiarazioni if.