Rispetto a linguaggi come Perl, Python ha un numero limitato di costrutti di controllo:
- solo
if
e no unless
,
- solo
for
che scorre su sequenze e no foreach
o stile C for
,
- solo
while
che controlla una condizione ogni ciclo e no do-while
,
- solo
if-elif
e no switch
,
- c'è solo un costrutto di commento, il
#
, e per ogni riga che puoi dire se è commentato o meno, senza guardare le righe precedenti.
Inoltre, c'è quasi un modo per indentare la tua fonte; la maggior parte dei casi di rientro creativo sono sintatticamente esclusi.
Questo rende l'analisi di una fonte Python più facile per l'uomo.
Ci sono tentativi di essere minimi ma completi nei tipi predefiniti e nella libreria standard.
- per la lista mutabile usi l'unico tipo incorporato
list
; è O (1) per la maggior parte delle operazioni e non devi mai scegliere l'implementazione giusta,
- per gli elenchi immutabili, allo stesso modo, basta usare il
tuple
tipo,
- per le mappe, usi l'unico built-in
dict
che è dannatamente efficiente nella maggior parte dei casi, non è necessario ponderare quale implementazione utilizzare.
Python 3 estende questo a numeri interi: non importa quanto sia grande il tuo numero intero, usi lo stesso tipo e non ti preoccupi mai della coercizione.
Python cerca di evitare lo zucchero sintattico. Ma a volte aggiunge zucchero sintattico solo per rendere ovvio il modo ovvio. Puoi scrivere if foo is not None
invece che if not (foo is None)
perché "non è" è in maiuscolo. foo is not None
Legge ancora facilmente, non può essere frainteso, e non devi pensare, scrivi semplicemente la cosa ovvia.
Naturalmente, la maggior parte delle cose più complesse in Python può essere eseguita in diversi modi. È possibile aggiungere metodi alle classi mediante dichiarazione o assegnazione di uno slot semplice, è possibile passare argomenti a funzioni in diversi modi creativi, ecc. Questo è solo perché gli interni della lingua sono esposti per lo più.
La chiave è che c'è sempre un modo che è destinato a essere il migliore, il caso di copertura generale. Se esistono altri modi, non sono stati aggiunti come alternative uguali (come if
e unless
) ma semplicemente espongono il funzionamento interno. Lentamente ma costantemente tali alternative sono obsolete (non eliminate!) Migliorando il meccanismo migliore noto.
I decoratori avvolgono le chiamate di funzione AOP. Prima del 2.6 dovevi usare __metaclass__
un membro magico per dichiarare la metaclasse di una classe; ora puoi usare la stessa sintassi di decoratore anche per questo. Prima della 3.0 avevi due tipi di stringhe, orientate ai byte e Unicode, che potresti inavvertitamente mescolare. Ora hai l'unico Unicode str
e l'unico binario-trasparente bytes
, che non puoi mescolare per errore.
"""
commenti (docstrings). Questi si estendono su più righe.