Você está na página 1de 12

Home Blog Cursos Loja  YouTube Contato

PYTHON

Python: Filosofia da Linguagem (Zen of Python)


 Dalton Peixoto  Dezembro 27, 2020  0 Comments 29 Likes

Criado com Tim Peters, um BDFL da linguagem Python, e extremamente bem recebido pela comunidade, o grupo de
20 aforismos conhecido como The Zen of Python (PEP 20) é o ponto principal para definir se um código é idomático
ou não.

Definido pelo próprio Guido van Rossum, criador da linguagem, como a perfeita descrição da filosofia do Python,
basta fazer um código consistente com todos os aforismos para ter um código idiomático. Que são eles:
Você sabia que a filosofia Zen está embutida na linguagem? Para acessá-la basta digitar no seu terminal o comando:

python

import this

Abaixo veremos melhor cada um deles:

1. Beautiful is better than ugly


Tradução: “Bonito é melhor que feio”

Sempre existem vários caminhos para chegar a uma mesma solução. Por isso em Python escolhemos por usar
sempre a versão “mais bonita”, ou seja, aquela visualmente mais elegante.
Ao invés de fazer assim:

if funcao(x) && y == 0 || z == 'yes':

opte por fazer assim:

if funcao(x) and y == 0 or z == 'yes':

2. Explicit is better than implicit


Tradução: “Explícito é melhor que implícito”

Por possuir grande flexibilidade de escrita, o Python te permite “esconder” determinadas partes de código. Por isso
nós devemos usar opção mais legível e que apresente todos os elementos (sem nada “escondido”). Por exemplo,
use:

import os

print os.getcwd()

ao invés de:

from os import *

print getcwd()

3. Simple is better than complex


Tradução: “Simples é melhor que complexo”

Esse é um compilado dos dois anteriores, a idéia do Python é ser uma linguagem amigável, simples e que facilite o
esforço do humano sobre a máquina e um código complexo demanda esforço para ser compreendido, portanto se
precisássemos escrever um arquivo com a informações: dados = [{'peso': 10, 'cor': 'verde'}, {'peso': 15, 'cor':

'azul'}]. Ao invés de usar uma solução complexa como:

import sqlalchemy

import sqlalchemy.types as sqltypes

def gravar(dados):

db = sqlalchemy.create_engine('sqlite:///dados.db')

db.echo = False

metadata = sqlalchemy.MetaData(db)

table = sqlalchemy.Table('dados', metadata,

sqlalchemy.Column('id', sqltypes.Integer, primary_key=True),

sqlalchemy.Column('peso', sqltypes.Float),

sqlalchemy.Column('cor', sqltypes.String(32)),

table.create(checkfirst=True)

for dado in dados:

i = table.insert()

i.execute(**dados)

Utilize algo simples e mais prático como:

import json

def gravar(dados):

with open('dados.json', 'w') as f:

f.write(json.dumps(dados))

Como a necessidade era apenas salvar um conjunto de informações em um arquivo qual das duas opções é a mais
simples?

4. Complex is better than complicated


Tradução: “Complexo é melhor que complicado”

Toda via nem sempre conseguimos resolver um problema de forma simples mas quase sempre conseguimos fugir da
solução complicada!

Primeiro tente resolver o problema com a solução complexa e se realmente não for possível resolver assim, então vá
para a opção complicada. Dizemos que uma solução é complicada quando seu código é ilegível, de difícil
manutenção e até mesmo difícil de explicar para outra pessoa a utilidade dele.

Para exemplificar melhor vamos ver o mesmo exemplo do Zen anterior mas dessa vez queremos gravar os dados
obrigatoriamente em um banco de dados. Sendo assim, podemos fazer como foi mostrado antes com o
SQLAlchemy que é um framework de Mapeamento Objeto Relacional (ORM) que foi uma solução complexa, ou
poderíamos fazer de forma complicada assim:

import MySQLdb

def gravar(dados):

db = MySQLdb.connect(user='usuario', passwd="senha", host='localhost', db="dados")

c = db.cursor()

c.execute("""

CREATE TABLE IF NOT EXISTS dados

id int(11) NOT NULL auto_increment,

peso float,

cor varchar(32)

PRIMARY KEY id

ENGINE=InnoDB CHARSET=utf8

""")

insert_sql = (

"INSERT INTO dados (peso, cor) "

"VALUES (%s, %s, %s)")

for dado in dados:

c.execute(insert_sql,

(dado['peso'], dado['dor'])

Essa solução é dita complicada pois é extremamente acoplada, dependente de implementação, pouco manutenível


e exige conhecimento não apenas da linguagem em questão (Python, no caso) mas de SQL também!

5. Flat is better than nested


Tradução: “Linear é melhor do que aninhado”

Opte por sempre escrever seus códigos de forma linear, sem aninhá-las. Isso deixa o código bem mais legível e evita
que tenhamos estruturas dentro de estruturas que estão dentro de outra estrutura. Use:

if i > 0:

return funcao(i)

elif i == 0:

return 0

else:

return 2 * funcao(i)

ao invés de:

if i>0: return funcao(i)

elif i==0: return 0

else: return 2 * funcao(i)

6. Sparse is better than dense


Tradução: “Esparso é melhor que denso”
Não amontoe muito código em uma linha, é importante sempre priorizar a legibilidade do código e excesso de código
em uma mesma linha dificulta a leitura e entendimento do mesmo.

7. Readability counts
Tradução: “Legibilidade conta”

Para aplicar esse Zen é bem simples: ao finalizar seu código ou bloco de código para um instante e olhe para ele
rapidamente. Você se sente bem ou da um arrepio ao ver tudo isso?

Se for a segunda opção então antes de continuar desenvolvendo tente iterar esse trecho, dando um “tapa no visual”!
Um exemplo simples (em Java):

public class ClassePrincipal {

public static void main(String[] args) {

System.out.println("Olá pythonistas!");

e em Python:

print("Olá pythonistas!")

8. Special cases aren’t special enough to break the rules.


Although practicality beats purity
Tradução: “Casos especiais não são especiais o bastante para quebrar as regras. Ainda que praticidade vença a
pureza”

Já ouvir a frase “ninguém está acima da lei”? Então, esse Zen é mais ou menos isso. Nenhum caso, código ou solução
é tão especial a ponto de passar por cima das regras!

Mesmo que a praticidade de algo seja tentadora a vencer a pureza (legibilidade) do código, ela nunca sobrepõe-se
às regras.

9. Errors should never pass silently. Unless explicitly


silenced
Tradução: “Erros nunca devem passar silenciosamente. A menos que sejam explicitamente silenciados”

Nunca “silencie” uma execução, isso é considerado um erro grave de manutenção de código pois esconde erros que
podem ser críticos ao sistema. Por exemplo se você não quer que seu código pare sua execução por algum erro
abaixo:
try:

x = funcao(y)

except:

pass

Faça, no mínimo:

try:

x = funcao(y)

except:

print("Deu ruim!")

Isso garante que no futuro se esse trecho de código der problema você terá ao menos uma saída informando esse
problema para facilitar sua atuação.

10. In the face of ambiguity, refuse the temptation to


guess
Tradução: “Diante da ambiguidade, recuse a tentação de adivinhar”

Esse Zen se relacionado com o anterior e reforça a idéia de manter o código sempre específico, limpo, bonito e claro.
Se você sabe que um trecho de código PODE dar errada SE isso ou aquilo acontecer, então assim como a Lei de
Murphy prevê: uma hora isso VAI acontecer!

11. There should be one— and preferably only one —


obvious way to do it. Although that way may not be
obvious at first unless you’re Dutch
Tradução: “Deveria haver um — e preferencialmente apenas um — modo óbvio para fazer algo. Embora esse modo
possa não ser óbvio a princípio a menos que você seja holandês”
O Python defende que deve existir apenas uma maneira de se chegar a solução de um problema. Isso contribui para
a simplicidade da linguagem como um todo, pense bem não é bem mais difícil aprender algo quando se tem diversas
maneiras de fazer a mesma coisa?

A segunda parte faz referência ao criador do Python, Guido van Rossum – que é holandês. Por ser o criador da
linguagem, faria sentido que aprender uma regra em Python seria mais fácil para ele do que qualquer outra pessoa,
no geral.

12. Now is better than never. Although never is often


better than right now
Tradução: “Agora é melhor que nunca. Embora nunca freqüentemente seja melhor que já.”

Já percebeu como diversos softwares e aplicativos são lançados em versões? Primeiro é feita a versão inicial e
depois vai se aprimorando mais e mais a aplicação, o conceito desse Zen é esse. As vezes é melhor por a mão na
massa, fazer a primeira versão, iterar sobre ela e deixá-la bonita (pythonicamente falando), dessa forma você estará
sempre progredindo.

Mas nunca saia fazendo qualquer coisa apenas pra ter algo, penso no mínimo na solução que o código deve ter.

13. If the implementation is hard to explain, it’s a bad idea


Tradução: “Se a implementação é difícil de explicar, é uma má idéia”

E novamente a simplicidade é pregada: se você ficou com dúvida sobre a sua própria implementação, revise-a!

14. If the implementation is easy to explain, it may be a


good idea
Tradução: “Se a implementação é fácil de explicar, pode ser uma boa ideia”

No geral se você consegue explicar facilmente e de forma simples a solução então ela pode ter sido uma boa idéia,
eu digo pode porque não necessariamente saber explicar uma implementação preceda uma boa implementação.

15. Namespaces are one honking great idea — let’s do more


of those!
Tradução: “Namespaces são uma grande ideia — vamos ter mais dessas!”

Namespaces são delimitadores abstratos que fornecem um contexto para aquilo que está sendo armazenado. No
caso do Python, eles servem para dar mais simplicidade ao código e deixá-lo mais legível, ou seja, uma ótima ideia.
Veja o exemplo a seguir:
import modelos.cachorro as cachorro

import modelos.gato as gato

def funcao():

cachorro.perseguir(gato)

Comente abaixo o que você achou desse artigo. Você já conhecia algum Zen?

PEPs Python    

Author
Dalton Peixoto

Cientista de Dados e fundador do Programador Aventureiro.

 PREVIOUS NEXT 

Related Posts

 Dalton Peixoto  Janeiro 2, 2021

O que são conjuntos de dados em Python


Conjuntos de dados, ou SETs como são conhecidos na linguagem, são coleções de elementos...
 Dalton Peixoto  Dezembro 27, 2020

Introdução ao Guia de Estilo de Código (PEP 8)


As PEP (Python Enhancement Proposals) são documentos que definem novas funcionalidades,
procedimentos e recomendações...

Deixe uma resposta


Search… 

ÚLTIMOS ARTIGOS

O que são conjuntos de dados em Python

janeiro 2, 2021

Introdução ao Guia de Estilo de Código (PEP 8)

dezembro 27, 2020

Python: Filosofia da Linguagem (Zen of Python)

dezembro 27, 2020

O que é Python

dezembro 27, 2020

O que é WooCommerce?

dezembro 3, 2020

TAGs

CMS E-commerce FTP Hospedagem de Sites Magento PEPs Plugin Protocolos da Internet Python

WooCommerce

Siga-nos

Produtos da nossa loja

Caneca "from tea import *"


R$ 24,90

Caneca Dicionário Python do amor


R$ 34,90

Caneca Pythonista
R$ 24,90

Caneca Monocrômica "In Guido we trust"


R$ 24,90

Caneca "from coffee import *"


R$ 34,90 – R$ 38,90
Home
Loja
Cursos
Sobre Nós
Termos de Uso
Política de Comentários
Contato


contato@programadoraventureiro.com
NOSSO EMAIL

SIGA-NOS

  

© 2020 Programador Aventureiro. Todos os Direitos Reservados

CNPJ: 35.391.334/0001-18

Você também pode gostar