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.__doc__
atributo. Mas cordas é uma área onde Python definitivamente fornece muitos caminhos retos ': uso de aspas simples, duplo ou triplo, juntar-se implicitamente literais adjacentes, usor
de literais-primas, etc.Outros exemplos são:
len()
é uma função em vez de um método presente em todas as seqüências; se você comparar com Java você tem.length
,.size()
,.getSize()
, e outros métodos para encontrar o número de elementos em uma seqüência.Outro exemplo é o fato de que
.join()
é umstring
método, não um método presente em todas as seqüências. Você não precisa saber se o parâmetro join é uma lista, um conjunto, uma compreensão ou o que quer que seja.fonte
Em C, existem muitas maneiras possíveis de aumentar o valor de uma variável em um:
Cada termina-se o aumento do valor de
i
pelo1
, mas cada um deles é ligeiramente diferente.No Python, existe realmente apenas uma maneira; basta adicionar um.
E embora haja mais de uma maneira sintaticamente válida de fazer isso (por exemplo
i = i + 1
), você está fazendo a mesma coisa com os mesmos efeitos colaterais.fonte
i = i + 1
é uma atribuição, não um incremento. Em python, um incremento éi += 1
. Em linguagens de estilo C você pode escreveri++
,++i
ei += 1
.i += 1
, BTW) produzem exatamente o mesmo resultado. A única vez em que vejo pessoas confusas é quando elas pré ou pós-incrementam uma variável como parte de uma expressão maior, e isso geralmente é rapidamente corrigido lendo a seção apropriada da referência de idioma. Pessoalmente, eu teria escolhido no fato de que você pode se referir ao quinto caracter de uma string por ambosstr[4]
ou*(str+4)
, mas talvez isso foi muito fácil ...max(i++, ++i)
não podem ser rapidamente corrigidos. C tem muitos casos de comportamento "indefinidos" e "dependentes da implementação", todos por uma boa razão - mas cada um pode criar uma armadilha.Outra possibilidade pode ser a compreensão da lista. No Python, você pode fazer isso:
Mas a maneira "óbvia" (se você é holandês ou está mais familiarizado com o Python) de fazer isso seria com uma compreensão da lista:
É mais curto, a new_list é criada em uma etapa, é mais rápida, acredito, e é elegante. Por outro lado, alguém poderia argumentar que parece menos explícito, mas acho que, depois que você se acostuma, é igualmente explícito.
fonte