Você pode ler a documentação da lang e torrar um pouco a mente em cada comando, não somente ler e entender, tenta imaginar como você pode usar aquilo, não somente da forma que te foi ensinado, mas tenta responder: Posso usar assim?, e assim?, etc..
Recetemente no codewars eu me deparei com uma solução simplismente genial..
Desafio: Você recebe um inteiro positivo, e retorna 'True' ou 'False' caso seja impar ou par . A solução que a maioria iria escrever seria:
def check(value):
return True if value%2 == 0 else 'False'
A galera mais esperta escreveu algo assim:
def check(value):
return bool(value%2)
#os caras do lambda
check = lambda v: bool(v%2)
Mas teve um cara que foi simplismente genial, em termos de simplicidade e boas práticas ele não levou muito crédito, porém, em conhecer a linguagem, o cara foi fera.
def check(value):
return[True,False][value%2]
Eu considero isso genial, por que ele sabe que x%x vai retornar 0 ou 1, e usou isso para acessar o índice correspondente no array, ele "quebrou" a forma como eu via o operador de modulo. E me fez perceber a importância de se aprofundar em cada detalhe da lang.
Rapaz, vocês foram longe viu. Essa lang que você diz, você se refere a linguagem certo?
Bom, eu faria assim:
def check(value):
return value % 2 != 0
Pois segundo a documentação, os operadores de comparação já retornam um booleano:
Comparisons yield boolean values:
True
orFalse
.
Então não há a menor necessidade de ficar fazendo malabarismos para obter os valores True
e False
, pois já é garantido que a comparação irá retornar sempre um deles.
Eu não achei a última solução "genial". Pra mim é só uma complicação desnecessária (pois como já disse, existem operadores que retornam os valores desejados, não precisa dar essa volta toda).
Eu vejo isso mais como uma curiosidade, uma forma diferente e inusitada, porém nada prática de usar os recursos da linguagem (e que eu jamais usaria em produção). Se o objetivo era ser mais "criativo", tudo bem, mas se a ideia era ter a solução mais simples, então eu prefiro a minha :-)