[Rodolfo Carvalho] If-else em uma linha de Python

Hoje aprendi mais uma forma [tosca] de fazer condicional com Python.

Depois do truque lógico do “condicao and valor_caso_verdadeiro or valor_caso_falso”, o que descobri navegando na Internet hoje foi:

>>> x = 5
>>> ["menor que 10", "maior que 10"][x > 10]
‘menor que 10′

Isso funciona porque o tipo bool (valor booleano) é um subclasse do tipo int, tipo requerido em indices de sequências.

>>> ["menor que 10", "maior que 10"]['not an integer']
TypeError: list indices must be integers

>>> issubclass(bool, int)
True

>>> ["menor que 10", "maior que 10"][True]
‘maior que 10′

Mas é claro que isso é só um “acidente” e não deve ser usado normalmente. A partir do Python 2.5 temos a sintaxe:

valor_caso_verdadeiro if condicao else valor_caso_falso