Como a beleza do seu código impacta na qualidade do seu software
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
"É 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."
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.
# 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}
# 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
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'],
)
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.
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
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)]
Na busca por uma melhor forma de se fazer algo existem algumas convenções que são recomendadas:
Guia de estilos básicos adotados pela comunidade Python
Exemplos de conceito de cada parte do zen do python
#FiqueEmCasa