Python/Sintassi: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m tag obsoleti
m Update syntaxhighlight tags - remove use of deprecated <source> tags
Riga 19:
L'indentazione deve essere effettuata solo per mezzo di spazi o tabulazioni (TAB), usarli entrambi in uno stesso programma viene considerato errore.
 
''Fattoriale in C:''<sourcesyntaxhighlight lang=c>
int fattoriale(int x) {
if (x == 0) {
Riga 27:
}
}
</syntaxhighlight>
</source>
''Fattoriale in Python:''
<sourcesyntaxhighlight lang=python> def fattoriale(x):
if x == 0:
return 1
else:
return x * fattoriale(x-1)
</syntaxhighlight>
</source>
 
All'inizio questo modo di indicare i blocchi può confondere le idee a chi viene da altri linguaggi, ma poi si rivela molto vantaggioso, perché risulta molto conciso e obbliga a scrivere sorgenti indentati correttamente, aumentando alquanto la leggibilità del codice quando passa di mano in mano.
Riga 41:
 
Come detto sopra, un altro punto di forza del Python è la disponibilità di elementi che facilitano la [[w:programmazione funzionale|programmazione funzionale]]. Come ci si può aspettare, questo rende ancora più comodo operare con liste o altri tipi contenitore. Uno di questi costrutti è stato preso dal linguaggio funzionale [[w:Haskell|Haskell]] e consente il "riempimento" di una lista, come possiamo vedere nel seguente esempio in cui vengono calcolate le prime cinque potenze di due:
<sourcesyntaxhighlight lang=python>
numeri = [1, 2, 3, 4, 5]
potenze_di_due = [ 2 ** n for n in numeri ]
</syntaxhighlight>
</source>
Dal momento che Python permette di avere funzioni come argomenti, è anche possibile avere costrutti funzionali più sottili, come ad esempio la ''[http://www.ps.uni-sb.de/~duchier/python/continuations.html continuation]''.
 
In Python esiste la parola chiave <code>lambda</code>, ma i blocchi <code>lambda</code> possono contenere solo [[w:espressione|espressioni]], non [[w:statement|statement]]. Non sono quindi il modo più generale per restituire una funzione. Si può usare invece la seguente tecnica, che restituisce una funzione il cui nome è definito in uno [[w:scope|scope]] locale.
<sourcesyntaxhighlight lang=python>
def add_and_print_maker(x):
def temp(y):
print "%d + %d = %d" % (x, y, x+y)
return temp</sourcesyntaxhighlight>
 
== Gestione delle eccezioni ==
Riga 66:
Cercare di dividere un numero per zero solleva un'eccezione di tipo ZeroDivisionError.
 
<sourcesyntaxhighlight lang=python>
def Dividi(a,b):
try:
Riga 72:
except ZeroDivisionError:
print "Errore! Si sta cercando di dividere per 0"
</syntaxhighlight>
</source>
 
Per prima cosa viene eseguito il blocco try, se non viene sollevata nessuna eccezione il blocco except viene saltato e l'esecuzione di try terminata. Se invece durante l'esecuzione il blocco try incontra un'eccezione viene interrotto e se l'eccezione corrisponde a quella citata nel blocco except, allora l'esecuzione passa al blocco except.