/ / Determina quale istruzione if è stata attivata? (python 2.7) - python, python-2.7

Determina quale istruzione if è stata attivata? (python 2.7) - python, python-2.7

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 № 1

IMO, 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.