Rispetto a linguaggi come Perl, Python ha un numero limitato di costrutti di controllo:
- solo
if
e nessun unless
,
- solo
for
che scorre su sequenze e senza foreach
o C-style for
,
- solo
while
che controlla una condizione ogni ciclo e nessuna do-while
,
- solo
if-elif
e nessun switch
,
- c'è solo un costrutto di commento,
#
, e per ogni riga 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 indentazione creativa sono sintatticamente esclusi.
Questo rende l'analisi di una fonte Python più facile per gli esseri umani.
Ci sono tentativi di essere minimi ma completi nei tipi built-in e nella libreria standard.
- per la lista mutabile si usa l'unico tipo built-in
list
; è O (1) per la maggior parte delle operazioni e non devi mai scegliere l'implementazione corretta,
- per gli elenchi immutabili, allo stesso modo, devi solo usare il tipo
tuple
,
- per le mappe, si utilizza l'unico
dict
incorporato che è dannatamente efficiente nella maggior parte dei casi, non occorre riflettere su quale implementazione utilizzare.
Python 3 estende questo valore ai numeri interi: non importa quanto sia grande il numero intero, si usa lo stesso tipo e non si preoccupa 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 di if not (foo is None)
perché 'is not' è di tipo speciale. Ancora foo is not None
legge facilmente, non può essere interpretato male, e non devi pensare, scrivi semplicemente la cosa ovvia.
Naturalmente, la maggior parte delle cose più complesse in in Python possono essere eseguite in diversi modi. Puoi aggiungere metodi alle classi per dichiarazione o per assegnazione di slot semplice, puoi passare argomenti a funzioni in un certo numero di modi creativi, ecc. Questo perché gli interni della lingua sono per lo più esposti.
La chiave è che c'è sempre un modo che è destinato a essere il migliore, il caso di copertura. Se esistono altri modi, non sono stati aggiunti come alternative uguali (come if
e unless
) ma si limitano a esporre i meccanismi interni. Lentamente ma costantemente tali alternative sono obsolete (non eliminate!) Migliorando il meccanismo migliore noto.
I decoratori eseguono il wrap delle chiamate AOP. Prima di 2.6 dovevi usare __metaclass__
magic member per dichiarare il metaclasse di una classe; ora puoi usare la stessa sintassi del decoratore anche per questo. Precedentemente alla versione 3.0 avevi due tipi di stringhe, orientate ai byte e Unicode, che potresti inavvertitamente mescolare. Ora hai l'unico% Unicode% co_de e l'unico str
trasparente binario, che non puoi mescolare per errore.