Comparado a linguagens como Perl, o Python possui um número limitado de construções de controle:
- somente
if
e não unless
,
- apenas
for
que itera sobre sequências e não foreach
ou no estilo C for
,
- apenas
while
que verifica uma condição a cada loop e não do-while
,
- somente
if-elif
e não switch
,
- há apenas um construto de comentário, o
#
, e para cada linha, você pode dizer se é comentado ou não, sem olhar para as linhas anteriores.
Além disso, há quase uma maneira de recuar sua fonte; a maioria dos casos de recuo criativo é sintaticamente excluída.
Isso facilita a análise de uma fonte Python para humanos.
Há tentativas de ser mínimo, mas completo, nos tipos internos e na biblioteca padrão.
- para lista mutável, você usa o único
list
tipo interno; é O (1) para a maioria das operações, e você nunca precisa escolher a implementação correta,
- para listas imutáveis, igualmente, você apenas usa o
tuple
tipo,
- para mapas, você usa o único built-in
dict
que é extremamente eficiente na maioria dos casos, sem necessidade de ponderar qual implementação usar.
O Python 3 estende isso para números inteiros: não importa o tamanho do seu número inteiro, você usa o mesmo tipo e nunca se importa com coerção.
Python tenta evitar o açúcar sintático. Mas às vezes adiciona açúcar sintático apenas para tornar óbvio o caminho óbvio. Você pode escrever em if foo is not None
vez de if not (foo is None)
porque 'is not' é especial. Ainda foo is not None
lê com facilidade, não pode ser mal interpretado, e você não precisa pensar, basta escrever a coisa óbvia.
Obviamente, a maioria das coisas mais complexas no Python pode ser feita de várias maneiras. Você pode adicionar métodos às classes por declaração ou por simples atribuição de slot, pode passar argumentos para funções de várias maneiras criativas, etc. Isso ocorre apenas porque os elementos internos do idioma são expostos principalmente.
A chave é que sempre existe uma maneira de se tornar a melhor, o caso de cobertura total. Se existirem outras formas, elas não foram adicionadas como alternativas iguais (como if
e unless
), mas apenas expõem o funcionamento interno. Lenta mas firmemente, essas alternativas são obsoletas (não eliminadas!), Aprimorando o melhor mecanismo conhecido.
Decoradores agrupam chamadas de função AOP. Antes da versão 2.6, você tinha que usar o __metaclass__
membro mágico para declarar a metaclasse de uma classe; agora você também pode usar a mesma sintaxe do decorador. Antes do 3.0, você tinha dois tipos de strings, orientados a bytes e Unicode, que você pode misturar inadvertidamente. Agora você tem o único Unicode str
e o único binário transparente bytes
, que não pode ser misturado por engano.
"""
comentários (docstrings). Estes abrangem várias linhas.