15.12.2022 Views

Python Eficaz

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

único membro, uma string vazia. Caso opacity não seja encontrado no

dicionário, este código age exatamente como no caso green.

Entretanto, essa expressão é difícil de ler e ainda não faz tudo o que é necessário.

Além disso, queremos assegurar que todos os valores dos parâmetros sejam

inteiros para que possamos usá-los em expressões matemáticas. Para isso, é

preciso envolver cada expressão em uma função int, nativa do Python, para

converter a string em inteiro.

red = int(my_values.get('red', [''])[0] or 0)

Se já era um tanto difícil de ler, com o int a coisa piorou bastante. Agora, está

extremamente difícil de entender. O ruído visual é considerável. O código não é

mais acessível. Uma pessoa não familiarizada com o código terá que perder

bastante tempo dividindo a expressão em pedacinhos menores para entender o

que ela realmente faz. Mesmo sendo uma boa ideia manter o código o mais curto

possível, não vale a pena incluir tudo isso em uma única linha.

O Python 2.5 introduziu expressões condicionais if/else – chamadas de ternárias

– para tornar casos como esses mais claros e ainda assim manter o código

enxuto.

red = my_values.get('red', [''])

red = int(red[0]) if red[0] else 0

Muito melhor! Para situações menos complicadas, as expressões condicionais

if/else podem tornar o código mais claro. No entanto, o exemplo anterior ainda

não é mais claro do que se usássemos comandos if/else em múltiplas linhas.

Comparar a lógica espalhada dessa forma com a versão condensada faz com que

a resumida pareça ainda mais complicada.

green = my_values.get('green', [''])

if green[0]:

green = int(green[0])

else:

green = 0

Uma função auxiliar é sempre preferível, especialmente se essa lógica deve ser

usada repetidamente:

def get_first_int(values, key, default=0):

found = values.get(key, [''])

www.full-ebook.com

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!