Python. Le basi

Commenti

# ...

Rientri

No tab. Usare 4 spazi.

Esempio di a capo:

vec = [
	'uno',
	'dieci',
	'cinque'
	]

Variabili e Assegnazione

Tipi: intero, reale, booleano, complesso, stringa

Definizione implicita

Nome variabile deve cominciare per lettera o _ poi possono seguire i numeri, lettere e _ ASCII

Esempio di assegnazione

a = 3

c, d = 'su', 'HTML.it' # assegnamento multiplo

Strutture dati

liste, dizionari, tuple e files

Parole riservate

False               def                 if                  raise
None                del                 import              return
True                elif                in                  try
and                 else                is                  while
as                  except              lambda              with
assert              finally             nonlocal            yield
break               for                 not
class               from                or
continue            global              pass

Operazioni matematiche di base

+ - * / 

int(...)   # conversione da float a int
float(...) # conversione da int a float

%  # operatore resto della divisione (funziona anche coi numeri con la virgola)

// # operatore di divisione intera tra interi

<< e >> # shift bit a bit a sinistra e a destra per interi ( 24<<1 = 48)

Operatori logici

or
and
not
<, <=, >, >=, ==, !=   (<> non esiste più...? )
|  # or bit a bit
&  # and bit a bit
^  # xor bit a bit

Stringhe

s = '....' oppure s = "...."

+ # concatenazione
* # ripetizione

s[3]  # quarto carattere della stringa
s[0:3] # dal primo incluso al quarto car. della stringa escluso
s[5:]  # dal sesto alla fine
s[:5]  # dal primo al quinto
s[-2]  # penultimo carattere
s[3:-2] # dal quarto al terzultimo
len(s) # numero di caratteri nella stringa

Metodi su stringhe

s.find('...') # numero carattere o -1
s.replace('old','new')  # rimpiazza
s.upper()  # maiuscolo
s.lower()  # minuscolo

# Segnaposti nelle stringhe
%s	stringa
%c	singolo carattere
%d	numero decimale
%u	intero senza segno
%o	numero in notazione ottale
%x	numero in notazione esadecimale
%g	numero reale in notazione normale
%e	numero reale in notazione scientifica

# Esempio:
risultato = "%s ha %d anni" % (nome, eta)

Le funzioni di base

print('...')
print(a,b,(a*b))

a = input('...')  # input stringa
a = eval('...') # stringa in numero

Liste

lista = [..., ..., ...]

# possono contenere qualsiasi tipo, anche altre liste

# indicizzazione come le stringhe (che sono liste di caratteri)

+  # concatenazione di liste
*  # ripetizione di liste

# eliminare un elemento di una lista:
lista[2] = []

len(lista)  # lunghezza lista

Metodi liste

lista.append(oggetto)
lista.extend(lista2)
lista.insert(indice,oggetto)

lista.pop([indice]) # restituisce ed elimina elemento lista o l'ultimo
lista.remove(valore) # elimina da lista il valore se c'è
lista.remove(lista[2]) # altro esempio d'uso di remove

lista.sort()  # ordina la lista in base a qualche criterio sensato
out = map(function, L)

out = [function(object) for object in L]

For straightforward function calls, the map solution is more efficient, since the function object only needs to be fetched once. For other constructs (e.g. expressions or calls to object methods), you have to use a callback or a lambda to wrap the operation; in such cases, the list comprehension is more efficient, and usually also easier to read.

Dizionari

# HASH -> molto veloci

diz = {oggetto1:oggetto2, oggetto3:oggetto4, ...}

diz[oggetto3] restituisce oggetto4

parola chiave "in" mi dice se un oggetto è nel dizionario
oggetto3 in diz


# inserimento
diz[oggetto5]=oggetto6

#modifica ...

# cancellazione
del diz[oggetto3]

len(diz)  # lunghezza dizionario

Metodi dizionari

diz.get('chiave')
diz.values()  # elenco valori
diz.keys()    # elenco chiavi
diz.items()   # elenco chiave, valore

# ordinare un dizionario in base alla chiave
lista_chiavi = list(diz.keys())
lista_chiavi.sort()
for elemento in lista_chiavi: print(elemento,diz[elemento])

Tuple

# tipo non mutabile! Una volta creato è quello
t = ()
t = (1,)
t = (1,2)
...

Operatori di conversione

tuple # converte da lista a tupla
list  # converte da tupla a lista

File

output = open('pippo.txt','w')	# apertura di un file in scrittura
input = open('dati','r')	# apertura di un file in lettura
s = input.read()	# lettura dell’intero contenuto del file
s = input.read(N)	# lettura di N bytes
s = input.readline()	# lettura di una riga (per files di testo)
s = input.readlines()	#restuisce l’intero file come lista di righe (per files di testo)
output.write(s)	# scrive nel file i valori passati come parametri e ritorna il numero di bytes scritti
output.writelines(L)	# scrive la lista L in righe nel file
output.close(L)	# chiusura del file
\n carattere di a-capo
# Modalità di apertura di open
"r"	Apre un file di testo in lettura, equivalente a "rt", se si omette il secondo parametro di open è la modalità di default
"w"	Apre un file in scrittura, e ne azzera i contenuti
"rb" e "wb"	Apre un file binario in lettura o scrittura con azzeramento del contenuto
"w+" e "w+b"	Aprono un file in modifica, rispettivamente testuale e binario, e consentendone l’aggiornamento, ma ne azzerano i contenuti
"r+" e "r+b"	Aprono un file in modifica, rispettivamente testuale e binario, e ne consentono l’aggiornamento senza azzerare i contenuti
# Posizionamento nel file
tell()	Ritorna la posizione attuale del cursore all’interno del file
seek(pos, rel)	Sposta la posizione del cursore all’interno del file, con il primo parametro indichiamo il numero di byte (positivo o negativo) di cui vogliamo spostarci, il secondo parametro indica il punto di partenza ( 0=dell’inizio del file; 1=dalla posizione attuale; 2:dalla fine del file)
read(N)	Legge N bytes dalla posizione corrente e sposta il cursore avanti di N posizioni

CICLI

IF-ELIF-ELSE

if condizione1:
    <gruppo di istruzioni 1>
elif condizione2:               # opzionale
    <gruppo di istruzioni 2>
 
...
 
elif condizione(n-1):           # opzionale
    <gruppo di istruzioni (n-1)>
else:                           # opzionale
    <gruppo di istruzioni n>
WHILE

while condizione:
    <gruppo di istruzioni>
FOR

for <contatore del ciclo> in <lista>:
    <gruppo di istruzioni>

for i in range(10):
    print(i)
USCIRE DAI CICLI
break	permette di saltare fuori da un ciclo ignorando le restanti istruzioni da eseguire
continue	permette di saltare alla prima istruzione della prossima iterazione del ciclo
else	sia il ciclo for che il ciclo while hanno un costrutto aggiuntivo opzionale che permette di eseguire un blocco di istruzioni all’uscita dal ciclo, queste istruzioni vengono ignorate se usciamo dal ciclo con un break

L'operazione pass non fa nulla.

COMPREHENSION

Permetto di creare una nuova lista o dizionario da uno vecchio

lista = [espressione for variabile in altra_lista if espressione]
ESEMPIO
euro = [2.5, 3.7, 20.9]
dollaro = [x*1.3 for x in euro]

diz   = {espr_chiave : espr_valore for espr_chiave, espr_valore in altro_diz if espressione}
 
diz   = {espr_chiave : espr_valore for variabile in  altra_lista if espressione}

FUNZIONI

def nome_funzione(<lista parametri separati da virgola>)
    <blocco istruzioni>
    return <risultato>

SCOPE Quando si utilizza una variabile, Python cerca prima il nome di quella variabile nel namespace locale. Se la ricerca non da esito positivo, si prosegue con il namespace globale e solo successivamente si va a cercare il nome tra le funzioni builtin (cioè quelle predefinite in python stesso). Questo meccanismo permette di utilizzare il valore delle variabili globali, ma di non poterle mai modificare, in quanto un nuovo assegnamento alla variabile provoca la creazione dello stesso nome in un namespace nuovo. Attenzione che i metodi cambiano l'oggetto in sé. Le assegnazioni o riassegnazioni creano un nuovo oggetto.

Parametri opzionali
def funzione2(a, b=30):
    print(a,b)
Parametri con numero indefinito tipo tupla
def trantupla(*tupla):
    print(tupla)
    print(type(tupla))
trantupla('uno', 'due', 'tre')
Parametri con numero indefinito tipo dizionario
def trandizionario(**dizionario):
    print(dizionario)
    print(type(dizionario))
trandizionario(primo=1, secondo=2, terzo=3)

MODULI

Collezioni di funzioni. File pippo.py
Per usarlo scrivere
import pippo (senza estensione)

Per usare le funzioni
pippo.funzione1(....)

Oppure se si importa così
from pippo import funzione1
oppure
from pippo import *
si possono richiamare le funzioni senza la dot notation

I MODULI SONO UTILI ANCHE PER VELOCIZZARE. PYC non viene ricreato.

Moduli standard: string, sys, os

CAPIRE IL NAMESPACE!

MODULI STANDARD (non c'è bisogno di importarli):
str....

ECCEZIONI

try:
<gruppo di istruzioni sotto test>
except:
<gruppo di istruzioni da eseguire in caso di errore>
else:	 # opzionale
<gruppo di istruzioni da eseguire se non c'è stata alcuna eccezione>
finally:	 # opzionale, al posto di except
<gruppo di istruzioni da eseguire anche se il try non ha dato alcuna eccezione>

MATPLOTLIB

plt.plot(Xlista,Ylista) # 2D normale
plt.scatter(Xlista,Ylista) # 2D scatter
X,Y = np.meshgrid(x,y)
plt.imshow(Zlista,interpolation='nearest', cmap='...', origin='lower')