tag:blogger.com,1999:blog-396083382034174439.post6919794499818837544..comments2023-05-13T02:06:00.529-07:00Comments on RodolfoCarvalho.net: If-else em uma linha de PythonRodolfohttp://www.blogger.com/profile/13115401885842551697noreply@blogger.comBlogger3125tag:blogger.com,1999:blog-396083382034174439.post-91519419047130579622009-08-09T19:51:46.297-07:002009-08-09T19:51:46.297-07:00Bem lembrado Osvaldo.
Apesar de eu não ter entrado...Bem lembrado Osvaldo.<br />Apesar de eu não ter entrado no mérito de explicar o truque do "and or", é sempre bom explicar pros afoitos que isso não é equivalente ao if else como você já explicitou.<br /><br />Eu só indico usar curto-circuito lógico só em casos especiais, e quando souber muito bem o que está fazendo... mas uma vez, legibilidade conta e muito.<br /><br />E por isso mesmo o truque principal [a,b][cond] é só uma brincadeira... não vejo nunca isso sendo usado em código de verdade.<br /><br />De qualquer forma, tem como fazer o que você propôs:<br /><br />[func_a, func_b][v == 'b']("x")<br /><br />É só chamar a função na hora que você quer que ela seja chamada...<br /><br />[]'sRodolfohttps://www.blogger.com/profile/13115401885842551697noreply@blogger.comtag:blogger.com,1999:blog-396083382034174439.post-16734153189909446972009-08-09T19:33:36.941-07:002009-08-09T19:33:36.941-07:00Oi Rodolfo,
Só algumas observações de 'segura...Oi Rodolfo,<br /><br />Só algumas observações de 'segurança' para cada uma dessas técnicas :)<br /><br />1 - em condicao and verdadeiro or falso – é sempre bom lembrar que para Python os valores "", (), [], {}, 0, None e tudo o que retorna 0 em __len__() ou em __nonzero__() são considerados FALSO. Portanto se o valor 'verdadeiro' na verdade for um desses valores ele não será retornado.<br /><br />2 - para esse caso é sempre bom tomar cuidado para não fazer algo como [ func_a("x"), func_b("x") ][ v == "b" ]. Não podemos nos esquecer que ambas as funções (func_a e func_b) serão executadas antes da condição "v == 'b'" ser avaliada.<br /><br />No caso da nova expressão if/else que apareceu no Python 2.5 tá 'tudo certo'. Só colocar um ( ) em torno dela pra 'garantir' a precedência :)<br /><br />Cuidando disso e garantindo a boa legibilidade do código (que é o mais importante) podem 'mandar bala' com qualquer uma dessas alternativas. :)Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-396083382034174439.post-57038104818994779972009-08-08T16:11:56.823-07:002009-08-08T16:11:56.823-07:00De qq forma, interessante.De qq forma, interessante.Israel Teixeirahttps://www.blogger.com/profile/00093796089537037769noreply@blogger.com