[TOC]
Python è stato progettato per la leggibilità e presenta alcune somiglianze con la lingua inglese, influenzato anche dal linguaggio della matematica. ed i tipi di dato sono statici.
In Python si usa andare a capo al termine di ogni comando, al contrario di altri linguaggi di programmazione che spesso usano punto e virgola o parentesi.
In Python si distinguono sempre le minuscole e le maiuscole.
In Python si conta sempre partendo da 0 (non da 1), ogni indice parte da 0.
In Python è fondamentale l’indentazione, cioè il rientro delle linee di testo del programma, con spazi bianchi o tabulazioni. L’indentazione si usa per distinguere blocchi di istruzioni, da eseguire insieme nel controllo del flusso del programma, ad esempio nella definizione di funzioni, istruzioni condizionali, cicli di istruzioni da ripetere, gestione degli errori. Altri linguaggi di programmazione usano spesso le parentesi graffe per questo scopo.
In Python non si devono dichiarare le variabili all’inizio del programma, ed il tipo di dati non è fisso. Per questo è più facile da apprendere per i principianti. Altri linguaggi come Perl, Julia, PHP, JavaScript si comportano in modo simile. Invece in linguaggi come C, C++, Java le variabili vanno dichiarate rima di usarle.
Quando viene eseguito un programma (script) Python viene prima precompilato in bytecode, un codice intermedio tra il codice sorgente ed il linguaggio macchina, poi il bytecode viene salvato per un successivo riutilizzo, infine interpretato e convertito in linguaggio macchina per la vera e propria esecuzione.
In alcuni casi le funzioni Python sono compilate in tempo reale in linguaggio macchina (piattaforma Numba) oppure convertite in C e compilate come in quel linguaggio (piattaforma Cython). In questo modo si velocizza molto l’esecuzione del programma.
Python ammette anche una modalità interattiva, ideale per i principianti, in cui si inseriscono i comandi e si vede subito il risultato. In questo è simile al Lisp ed a software come SageMath, Octave, MatLab, Mathematica, ma differente dagli altri linguaggi di programmazione.
python.org - La documentazione ufficiale, in inglese, con un Tutorial , una Guida di riferimento , un manuale per la Libreria standard , ed una guida Setup and Usage .
python.it - Traduzione parziale in italiano della documentazione, tra cui il Tutorial .
Una variabile si può nominare in qualsiasi modo a condizione che obbedisca alle seguenti regole:
L’operatore di assegnazione è =
Esempi:
a = b
assegna il valore b alla variabile ax = 1
assegna il valore 1 alla variabile xspam = 'Ciao'
assegna il valore ‘Ciao’ alla variabile spam
.Non confondere mai l’operatore di assegnazione del valore ad una variabile =
con l’operatore di uguaglianza tra due termini di una espressione
==
.
Il trucco dell’assegnazione multipla è una scorciatoia che consente di assegnare valori a più variabili nella stessa riga di codice.
Esempi:
*assegnazione singola°
size = 'grasso'
color = 'arancio'
disposition = 'forte'
*assegnazione multipla°
size, color, disposition = ['grasso', 'arancio', 'forte']
L’assegnazione multipla è utile anche per scambiare i valori tra due variabili:
Esempio:
a, b = 'Alice', 'Bob'
a, b = b, a
print(a)
print(b)
Un programma tratta molti tipi diversi di dati, come numeri, caratteri, testi. I più comuni sono:
Nome | Descrizione |
---|---|
int | Numero intero, con segno |
float | Numero decimale in virgola mobile (floating-point in inglese) |
complex | numero complesso, come 2 + 3j ( j è l’unità immaginaria ) |
bool | Valore logico (booleano), vero o falso (true o false in inglese) |
str | Stringa, una sequenza di caratteri, come una parola od una frase |
Note:
I numeri decimali si scrivono sia con il punto seguito dalle cifre decimali che in
notazione esponenziale (scientifica), con e
per indicare la potenza di 10 per cui moltiplicare
Per i numeri complessi si usa j come unità immaginaria (il quadrato di j è uguale a -1, $j^2 = -1$ ), al posto di i che si usa invece in matematica.
I caratteri delle stringhe sono memorizzati in Unicode (metodo di codifica dei caratteri indipendente dalla lingua e dal sistema informatico utilizzato)
Esempi:
-2, -1, 0, 1, 2, 3, 4, 5
sono numeri interi ( int).-1.25, -1.0, --0.5, 0.0, 0.5, 1.0, 1.25
sono numeri a virgola mobile (float).1.2e3
, che equivale a 1200
, è sempre un numero a virgola mobile in notazione esponenziale a base 10.'a', 'aaa', 'Ciao!', '11 gatti', '345'
sono stringhe (str), e sono sempre racchiuse tra apici (quotate).Sono definiti internamente alcuni tipi di dati per le strutture dati composte, formate con i tipi semplici (scalari) precedenti
Nome | Descrizione |
---|---|
set | Insieme, una collezione di dati qualunque non ordinata, modificabile |
list | Lista, una collezione ordinata di dati, con un indice |
tuple | Tupla, una lista non modificabile |
dict | un dizionario, una tabella composta di coppie chiave - valore |
Altri tipi di dati utili non sono incorporati nel linguaggio, ma forniti da moduli aggiuntivi.
Nome | Modulo | Descrizione |
---|---|---|
fraction | fractions | frazione, numero razionale come 2/3, 0.1 |
decimal | decimal | decimale con precisione assegnata, alternativo a float |
array | numpy | vettore, matrice, griglia multidimensionale di dati |
datetime | datetime | una combinazione di data, ora e fuso orario |
In ordine di precedenza:
Operatore | Operazione | Esempio |
---|---|---|
** | Esponente, elevamento a potenza | 2 ** 3 = 8 |
% | Modulo/Resto della divisione intera | 22 % 8 = 6 |
// | Divisione tra interi | 22 // 8 = 2 |
/ | Divisione tra interi o decimali | 22 / 8 = 2.75 |
* | Moltiplicazione | 3 * 3 = 9 |
- | Sottrazione | 5 - 2 = 3 |
+ | Addizione | 2 + 2 = 4 |
Per alterare la precedenza si usano le espressioni come in matematica.
Esempio di espressioni nell’interprete interattivo:
2 + 3 * 6
(2 + 3) * 6
2 ** 8
23 // 7
23 % 7
(5 - 1) * ((7 + 1) / (3 - 1))
Nel linguaggio base sono definite molte funzioni, qui alcune tra le più comuni
Funzione | Descrizione |
---|---|
print() | stampa in uscita una stringa di risultati |
input() | legge in ingresso dati inseriti dall’utente |
help() | informazioni di aiuto su una funzione od un modulo |
type() | controlla il tipo dati di una variabile |
abs(n) | Restituisce il valore assoluto di un numero |
round(x) | Arrotonda un numero |
divmod(m,n) | Restituisce il quoziente ed il resto di una divisione |
len(string) | Restituisce la lunghezza di una stringa |
Stampa la stringa o le variabili passate tra parentesi come argomento
print('Ciao Mondo!')
a = 42
print('Ciao Mondo! La risposta è ', a)
Per modificare la print si usano le parole chiave end: terminatore e sep: separatore
print('Ciao', end='')
print('Mondo')
print('gatti', 'cani', 'topi')
print('gatti', 'cani', 'topi', sep=',')
La funzione input serve per leggere il valore di un dato, che deve essere immesso dall’esecutore del programma
Esempio:
print('Come ti chiami?') # chiede il nome
myName = input()
print('Un vero piacere incontrarti,', myName)
Informazioni sulle funzioni
help(print)
Informazioni su un modulo (da caricare prima nel programma con import)
import math
help(math)
help(math.cosh)
Senza argomenti è uno strumento interattivo per consultare la documentazione del linguaggio
elp()
Se non si è sicuri del tipo di dato si usa la funzione speciale type per visualizzarlo:
* type(27) dà come risultato *int*
* type('ciao') dà come risultato *str*
Funzione | Descrizione |
---|---|
int() | Converte in un numero intero |
float() | Converte in un numero decimale |
complex() | Converte in un numero complesso |
bool() | Restituisce il valore booleano (vero o falso) |
chr() | Converte un codice Unicode in un carattere |
str() | Converte in una stringa |
bin() | Converte un numero in binario |
oct() | Converte un numero in ottale |
hex() | Converte un numero in esadecimale |
dict() | Converte i dati in un dictionary |
tuple() | Converte i dati in una tupla |
set() | Converte i dati in un set |
frozenset() | Converte i dati in un frozenset |
bytearray() | Converte in una lista di bytes modificabile |
bytes() | Converte in una lista di bytes immutabile |
I nomi dei tipi di dato corrispondono anche a delle funzioni per convertire un tipo in un altro. Ad esempio: * int(‘345’) converte la stringa ‘345’ nel numero intero 345 * float(27) converte il numero intero 27 nel numero decimale 27.0
Integer to String or Float:
str(29)
print('I am {} years old.'.format(str(29)))
str(-3.14)
Float to Integer:
int(7.7)
int(7.7) + 1
Per rendere il codice più comprensibile è una buona pratica aggiungere molti commenti.
Commento su una linea:
# Questo è un commento inline
Commento multilinea:
# Questo invece è un commento
# su più righe
Codice con un commento:
a = 1 # inizializzazione
Notare i due spazi prima del commento.
In Python si chiama modulo o libreria una raccolta di funzioni, dati e costanti (classi, oggetti e metodi nel linguaggio della programmazione orientata agli oggetti). Un modulo in genere è contenuto in un file del computer con estensione .py.
Per utilizzare un modulo si usa l’istruzione import all’inizio di un programma
import math
in questo caso viene importata la libreria standard di funzione matematiche, dal file math.py. Nel resto del programma si possono usare funzioni, costanti e tipi di dati del modulo usando math come prefisso. Esempio:
import math
math.pi
math.cos( 0.15 * math.pi )
Si può anche cambiare nome al modulo con il comando import, ed utilizzare nel programma il nuovo prefisso
import math as m
m.cos( 0.15 * m.pi )
Infine si possono importare nello spazio dei nomi principale del programma alcune funzioni e costanti del modulo ed utilizzarle direttamente senza prefisso
from math import pi,sin
sin(0.3 * pi)
E’ possibile anche importare direttamente nel programma tutti i nomi di un modulo. Ma è una pessima pratica, generatrice di errori e confusione, che ha senso utilizzare solo da principianti, quando si muovono i primi passi nel mondo della programmazione e del linguaggio python, e si scrivono programmi molto semplici
from math import *
cos(0.2 * pi)
import random
for i in range(5):
print(random.randint(1, 10))
import random, sys, os, math
from random import *.
Una funzione interna del linguaggio, dir(), elenca tutti i nomi di funzioni e variabili di un modulo
import math
dir(math)
Se si chiama dir() senza argomenti vengono elencati tutti i nomi noti nel programma
dir()
Modulo | Descrizione |
---|---|
math | matematica con i numeri reali, funzioni e costanti più comuni |
cmath | matematica con i numeri complessi |
mpmath | matematica con precisione decimale arbitraria |
decimal | decimali, per ovviare ad alcune limitazioni del tipo float in math |
fractions | frazioni, per ovviare ad alcune limitazioni del tipo float in math |
random | numeri casuali, probabilità |
statistics | funzioni statistiche |
Modulo | Descrizione |
---|---|
sympy | Symbolic Python, calcolo simbolico, algebra assistita dal calcolatore |
numpy | Numerical Python, calcolo numerico, costanti matematiche |
scipy | Scientic Python, estensione di numpy, calcolo, costanti fisiche e chimiche |
pandas | Analisi e manipolazione dei dati, in particolare tabelle e serie temporali |
matplotlib | Modulo per disegno, grafica e visualizzazione dei dati |
Operatore | Descrizione |
---|---|
and | (expr1) and (expr2) , vero se entrambe le espressioni sono vere |
or | (expr1) or (expr2), vero se una delle due è vera |
not | not (expr), vero se l’espressione è falsa |
is | (expr) is True (False), l’espressione è vera (o falsa) |
is not | (expr) is not True (False), l’espressione non è vera (o non è falsa) |
Tavola della verità per and:
Espressione | Risultato |
---|---|
True and True | True |
True and False | False |
False and True | False |
False and False | False |
Tavola della verità per or:
Espressione | Risultato |
---|---|
True or True | True |
True or False | True |
False or True | True |
False or False | False |
Tavola della verità per not:
Espressione | Risultato |
---|---|
not True | False |
not False | True |
Operatore | Significato |
---|---|
== | Uguale |
!= | Diverso |
< | Minore di |
> | Maggiore di |
<= | Minore od uguale |
>= | Maggiore od uguale |
Un’espressione con questi operatori è vera o falsa a seconda che la condizione sia soddisfatta o meno.
Esempi:
42 == 42
True
40 == 42
False
'hello' == 'hello'
True
'hello' == 'Hello'
False
'gatto' != 'cane'
Vero
42 == 42.0
True
42 == '42'
False (il secondo termine è una stringa)
Queste istruzioni sono equivalenti:
if a is True:
pass
if a is not False:
pass
if a:
pass
Ed anche queste:
if a is False:
pass
if a is not True:
pass
if not a:
pass
(4 < 5) and (5 < 6)
(4 < 5) and (9 < 6)
(1 == 2) or (2 == 2)
2 + 2 == 4 and not 2 + 2 == 5 and 2 * 2 == 2 + 2
if name == 'Alice':
print('Hi, Alice.')
name = 'Bob'
if name == 'Alice':
print('Hi, Alice.')
else:
print('Hello, stranger.')
name = 'Bob'
age = 5
if name == 'Alice':
print('Hi, Alice.')
elif age < 12:
print('You are not Alice, kiddo.')
name = 'Bob'
age = 30
if name == 'Alice':
print('Hi, Alice.')
elif age < 12:
print('You are not Alice, kiddo.')
else:
print('You are neither Alice nor a little kid.')
Con while seguito da una condizione si definisce un blocco di istruzioni che viene ripetuto finchè la condizione è soddisfatta
spam = 0
while spam < 5:
print('Hello, world.')
spam = spam + 1
Se durante l’esecuzione del programma si raggiunge un’istruzione break, si esce immediatamente dal ciclo while
while True:
print('Please type your name.')
name = input()
if name == 'your name':
break
print('Thank you!')
Se durante l’esecuzione del programma si raggiunge un’istruzione contina, si ritorna all’inizio del ciclo.
while True:
print('Who are you?')
name = input()
if name != 'Joe':
continue
print('Hello, Joe. What is the password? (It is a fish.)')
password = input()
if password == 'swordfish':
break
print('Access granted.')
Funzione | Descrizione |
---|---|
range(n) | Crea una sequenza di numeri interi, da 0 a n - 1 |
range(i,j,k) | Crea una sequenza da i a j (escluso) con incremento k |
La lista risultante, di tipo range, è una sequenza di numeri interi. |
La funzione * range () * può anche essere chiamata con tre argomenti. I primi due argomenti saranno i valori iniziale e finale, e il terzo sarà il passo. Il passo, o incremento, è la quantità di cui la variabile viene aumentata dopo ogni iterazione. Per un conto alla rovescia si definisce un incremento negativo.
Esempi:
range(20)
range(1, 20, 2):
range(10, 0, -1):
Con l’istruzione for si definisce la ripetizone di un blocco di istruzioni per una serie di valori di una variabile, un ciclo finito
Esempi:
print('My name is')
for i in range(5):
print('Jimmy Five Times ({})'.format(str(i)))
for i in range(0, 10, 2):
print(i)
for i in range(5, -1, -1):
print(i)
L’istruzione def serve per definire nuove funzioni
def hello(name):
print('Hello {}'.format(name))
Quando si crea una funzione utilizzando l’istruzione def, si può specificare il valore restituito con un’istruzione return. Un’istruzione return è composta dalla chiave return seguita dal valore o dall’espressione che la funzione dovrebbe restituire.
import random
def getAnswer(answerNumber):
if answerNumber == 1:
return 'It is certain'
elif answerNumber == 2:
return 'It is decidedly so'
elif answerNumber == 3:
return 'Yes'
elif answerNumber == 4:
return 'Reply hazy try again'
elif answerNumber == 5:
return 'Ask again later'
elif answerNumber == 6:
return 'Concentrate and ask again'
elif answerNumber == 7:
return 'My reply is no'
elif answerNumber == 8:
return 'Outlook not so good'
elif answerNumber == 9:
return 'Very doubtful'
r = random.randint(1, 9)
fortune = getAnswer(r)
print(fortune)
spam = print('Hello!')
spam is None
Nota: non confrontare mai “None” con l’operatore “==”. Usa sempre “is”.
Di solito quando si fa un errore durante l’esecuzione il programma si interrompe. Per modificare questo comportamento si usa un blocco di istruzioni
try:
<qualche operazione che può dare un errore>
except <Tipo di errore > as e:
<fai qualcos'altro invece di uscire dal programma>
Esempio:
def spam(divideBy):
try:
return 42 / divideBy
except ZeroDivisionError as e:
print('Error: Invalid argument: {}'.format(e))
print(spam(2))
print(spam(12))
print(spam(0))
print(spam(1))
Dal sito PEP 20 – The Zen of Python :
Il programmatore esperto Tim Peters ha elencato i principi guida per un progetto Python in 20 aforismi, solo 19 dei quali sono stati scritti.
import this
Una rapida introduzione al linguaggio python basata su python cheatsheet e molte altre fonti, citate in bibliografia, con licenze Creative Commons license .