Beleza Pythonica
Como a beleza do seu código impacta na qualidade do seu software
> whoami
Jean, 31 anos, trabalho com TI a 14 anos, autodidata e hoje engenheiro de software na GovPredict.

(quem sou eu?)
github.com/jeanmask linkedin.com/in/jean3 @jean_o



O que é ser "Pythonico?"

"É um adjetivo que descreve uma forma de programar de acordo com a filosofia Python. Existem muitas formas de fazer a mesma coisa em Python mas - quase sempre - há uma forma preferível, este jeito é chamado de Pythonico."
Mas código bonito não seria apenas "firula"?
> Zen do Python
Principios que guiam o desenvolvimento Python.
Bonito é melhor que feio.
Explícito é melhor que implícito.
Simples é melhor que complexo.
Complexo é melhor que complicado.
Linear é melhor do que aninhado.
Esparso é melhor que denso.
Legibilidade conta.
Casos especiais não são especiais o bastante para quebrar as regras.
Ainda que praticidade vença a pureza.
Erros nunca devem passar silenciosamente.
> Código explicito
# Ruim
def make_complex(*args):
x, y = args
return dict(**locals())
Apesar do python permitir você fazer praticamente tudo, seja o mais explicito possível!
# Bom
def make_complex(x, y):
return {'x': x, 'y': y}
> Uma instrução por linha
# Ruim
print 'one'; print 'two'
if x == 1: print 'one'
if <complex comparison> and <other complex comparison>:
# do something
Sempre que possível use apenas uma expressão por linha.
# Bom
print 'one'
print 'two'
if x == 1:
print 'one'
cond1 = <complex comparison>
cond2 = <other complex comparison>
if cond1 and cond2:
# do something
> Argumentos de funções e métodos
Posicional
Obrigatório sem valor padrão.
Palavra-chave
Opcional possui valor padrão.
def send_mail(mail, subject, body, *, cc=None, bcc=None):
# something
send_mail(
'alguem@gmail.com',
'titulo do email',
'corpo do email',
cc=['fulano@gmail.com'],
)
> Retornando valores
def is_valid(value):
return value and isinstance(value, str) and len(value) > 0
def fullname(name, lastname):
if is_valid(name) and is_valid(lastname):
fullname = f'{name} {lastname}'
else:
raise ValueError('You must be define name and lastname!')
return fullname
Unico ponto de retorno, em python exceções podem ser definir comportamento, não apenas erros.
> Código idiomático
Escreva seu código de forma que ele faça sentido literal ao ser lido, o python oferece algumas sintaxes que ajudam nisso.
# unpacking (desempacotamento)
for index, item in enumerate(some_list):
# alguma coisa com o index e item
# invertendo variaveis
a, b = b, a
# desempacotar valores aninhados também funciona!
a, (b, c) = 1, (2, 3)
a, *resto = [1, 2, 3]
# a = 1, resto = [2, 3]
a, *meio, c = [1, 2, 3, 4]
# a = 1, meio = [2, 3], c = 4
> Código idiomático
Escreva seu código de forma que ele faça sentido literal ao ser lido, o python oferece algumas sintaxes que ajudam nisso.
# Multiplicação de listas
quatro_nones = [None] * 4
# Criando quatro listas de listas
quatro_lists = [[] for __ in xrange(4)]
> Algumas convenções
Na busca por uma melhor forma de se fazer algo existem algumas convenções que são recomendadas:
>PEP-8
Guia de estilos básicos adotados pela comunidade Python
> Zen do Python por exemplos
Exemplos de conceito de cada parte do zen do python
Obrigado e
#FiqueEmCasa
deck
By Jean Oliveira Rodrigues
deck
- 343