









Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
nel documento ci sono blocchi di codice per programmare in Python. Dalle cose base come la funzione print fino a cosa più complesse come i cicli
Tipologia: Sintesi del corso
1 / 17
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!










La funzione print dispone di un ulteriore parametro per specificare cosa deve accadere alla fine della riga stampata a schermo. Tale parametro si chiama end='' (endline). Se end='\n' (opzione di default) allora print va a capo ad ogni fine riga Se end='' allora print non va a capo ad ogni fine riga Se end='altra_stringa' allora print concatena altra_stringa ad ogni fine riga (a capo o meno dipende da come finisce quella stringa)
Moltiplicazione/elevamento a potenza: Nel calcolo della moltiplicazione si usa l'asterisco singolo * Nel calcolo dell'elevamento a potenza si usa il doppio asterisco **. Divisione/quoziente: Nel calcolo della divisione si usa la barra singola / Nel calcolo del quoziente si usa la doppia barra //.
Priorità di valutazione Quando un'espressione aritmetica contiene più operatori (+, -, *, ecc..), il risultato della sua valutazione si ottiene valutando pezzi più piccoli dell'espressione seguendo un ordine di priorità.
Per le espressioni matematiche, Python segue le stesse regole di precedenza comunemente usate in matematica. Ad esempio, nell'espressione 2 * 3 + 4 la moltiplicazione si fa per prima e l'addizione si fa dopo. Quindi il risultato è 10 (e non 14).
L'acronimo PEMDAS è un modo utile per ricordare le regole. L'ordine delle operazioni è il seguente:
Parentesi Elevamento a potenza Moltiplicazione e Divisione hanno priorità maggiore di Addizione e Sottrazione Invece, gli operatori con la stessa priorità vengono valutati da sinistra verso destra (eccetto la potenza).
Valori e tipi Un valore è un mattoncino di base che un programma è in grado di elaborare. Un valore è una cosa fissa, come il numero 2, o la stringa 'Informatica e Bioinformatica', o i valori di verità True (vero) e False (falso). Un valore ha quindi un tipo. Per scoprire che tipo ha un valore possiamo usare la funzione built in di python type
Conversione di tipi Molte volte ci si trova nella situazione di dover convertire valori da un tipo di partenza ad uno di arrivo. Ad esempio, supponiamo che ci venga dato un valore stringa '10'. Per effettuare qualsiasi calcolo dobbiamo prima convertirlo in numero (intero, in questo caso). Per fare ciò possiamo usare delle altre funzioni built in di python. ESEMPI:
Il valore assoluto di un valore numerico si calcola con la funzione built in abs che prende come parametro il valore numerico sul quale calcolare il valore assoluto.
Il troncamento ad un numero fisso di cifre dopo la virgola si calcola con la funzione round che prende come parametri
il valore numerico da troncare il numero di cifre dopo la virgola da tenere. Nota: se il secondo parametro è omesso, round tronca il numero all'intero più vicino (=è equivalente alla funzione int). ESEMPI:
Variabili Una delle caratteristiche più potenti di un linguaggio di programmazione è la capacità di elaborare delle variabili. Una variabile è un contenitore per un valore Una variabile ha un nome (es, x, y, risultato, messaggio, ecc..) Una variabile può essere letta (=recupero del valore che contiene) Una variabile può essere scritta (=assegnamento di un nuovo valore) In python una variabile viene creata, specificandone il nome, tramite un'istruzione di assegnazione.
Variabili ed Espressioni Un'espressione è una combinazione di valori, variabili, e operatori. Come abbiamo visto prima, lavorando con espressioni che operano solo su valori numerici, quando scriviamo un'espressione, l'interprete la valuta, cioè calcola valore dell'espressione.
Operatori aritmetici compatti Quando una variabile appare sia a sinistra che a destra dell'= (come ad esempio x = x + 1) python permette di compattare la notazione nel modo seguente tramite i seguenti operatori += assegna alla variabile a sinistra dell'operatore il risultato della somma tra il suo valore corrente e il risultato dell'espressione a destra -= assegna alla variabile a sinistra dell'operatore il risultato della della sottrazione tra il suo valore corrente e il risultato dell'espressione a destra *= assegna alla variabile a sinistra dell'operatore il risultato della della moltiplicazione tra il suo valore corrente e il risultato dell'espressione a destra **= assegna alla variabile a sinistra dell'operatore il risultato della dell'elevamento a potenza del il suo valore corrente con il risultato dell'espressione a destra /= assegna alla variabile a sinistra dell'operatore il risultato della della divisione tra il suo valore corrente e il risultato dell'espressione a destra //= assegna alla variabile a sinistra dell'operatore il risultato della del calcolo del quoziente tra il suo valore corrente e il risultato dell'espressione a destra %= assegna alla variabile a sinistra dell'operatore il risultato della della calcolo del modulo tra il suo valore corrente e il risultato dell'espressione a destra
Formattazione di una stringa La formattazione di una stringa è un'operazione talmente importate che si è deciso di dedicargli una sezione a parte. Per formattare una stringa si usa il metodo .format passando i parametri che si vogliono inserire in punti precisi della stringa da formattare identificati da coppie di parentesi graffe {} che possono essere:
Regola generale: stringa.format(v1,...,vN, nomevalore1=u1, ..., nomevaloreN=uN) v1,...,vN si sostituiscono alle {} posizionali: nell'ordine in cui appaiono se gli indici non sono specificati rispettando l'ordine degli indici se questi sono specificati u1,...,uN si sostituiscono alle {} nominative nell'ordine che più vi piace
Una stringa ancora da formattare può essere il valore di una variabile che viene inserito nella stringa successivamente tramite .format (ad esempio per la stampa a schermo)
Lunghezza di una stringa Nell'esempio precedente è abbastanza intuitivo concludere che la stringa DNA ha lunghezza di 14 caratteri. In generale, non possiamo essere certi della lunghezza di una stringa prima che il nostro programma venga eseguito. Ad esempio, la stringa potrebbe arrivare come input. Per calcolare la lunghezza di una stringa possiamo usare la funzione built in di python len
Per ogni stringa s di N caratteri vale che:
Input da tastiera In tutti i programmi precedenti i dati di input erano hardcoded (cioè, fissati all'interno del programma stesso). A parte casi particolari questa non è la prassi generale. In generale dobbiamo avere la possibilità di fornire al nostro programma l'input che più ci pare. Ci sono tanti modi di fornire dati in input ad un programma. Per fare ciò ci avvarremo della funzione built in di python input. Tale funzione si usa nel seguente modo valore = input(messaggio) dove:
Booleani Un valore booleano è o True oppure False e ha tipo bool. Attenzione: Per rappresentare vero si usa True (con la T maiuscola) e non true Per rappresentare falso si usa False (con la F maiuscola) e non false Per convenzione: Il valore booleano False corrisponde al valore intero 0 Il valore booleano True corrisponde al valore intero 1 Possiamo anche verificare il viceversa tramite la funzione built in bool(n) dove n è un numero, tenendo a mente che: se n è uguale 0 (o 0.0) allora il valore corrispondente è False se n è diverso da 0 (o 0.0) allora il valore corrispondente è True La funzione bool può anche essere applicata ad altri valori o ad oggetti più complessi. Bisogna ricordare che: bool(x) ritorna sempre True a meno dei seguenti casi: x è (o contiene) il valore None oppure il valore False x è (o contiene) un valore numerico equivalente a "zero" (es, 0, 0.0, ecc) x è una sequenza o collezione di oggetti vuota (es, una stringa, una lista di numeri vuota)
Espressioni booleane Come per le espressioni aritmetiche, qui possiamo mischiare: valori booleani variabili booleane, e operatori booleani per comporre espressioni booleane.
Esistono 3 operatori booleani principali: and, or, e not. and e or sono operatori binari. Si applicano cioè a due variabili/valori booleani.
Operatori di confronto Abbiamo bisogno di un insieme diverso di operatori chiamati operatori di confronto. Supponiamo che x e y siano due valori/variabili numeriche. Allora: x == y produce il valore booleano True se x e y sono uguali. Altrimenti produce il valore booleano False.x != y produce il valore booleano True se x e y sono diversi. Altrimenti produce il valore booleano False.
Tuple le tuple sono sequenze finite di valori. le tuple sono immutabili. una tupla è definita listando i valori che la compongono: se la tupla contiene un solo valore allora la sintassi per definirla è valore, se la tupla contiene N > 1 allora la sintassi per definirla è valore1,...,valoreN sebbene non necessario, di solito una tupla è racchiusa da parentesi tonde () ogni valore nella tupla ha una posizione se la tupla contiene N valori, allora il primo è in posizione 0 e l'ultimo in posizione N− l'accesso al valore i-esimo e lo slicing funziona tramite gli operatori [] nello stesso modo che abbiamo visto per le stringhe.
Unpacking Se ci viene fornita una tupla (v1,...,vN) possiamo "spacchettarla" (unpack it) assegnando ogni valore ad una variabile diversa. La sintassi per fare questa operazione è la seguente: x1,...,xN = (v1,...,vN) ESEMPIO: t = ('Matteo', 'Zavatteri') nome, cognome = t print(nome) print(cognome) L'unpacking è importante perchè a volte il risultato di un calcolo ritorna più di un valore. La divisione intera è un esempio: il risultato ritorna due cose:
Funzioni sulle tuple Alcune funzioni prendono come parametro una tupla e ritornano il risultato di qualche calcolo. Le funzioni il cui uso si può ritenere frequente sono le seguenti: len(tupla) ritorna la lunghezza (corrente) di una tupla min(tupla) ritorna l'elemento più piccolo nella tupla. Richiede che tutti gli elementi siano dello stesso tipo. max(tupla) ritorna l'elemento più grande nella tupla. Richiede che tutti gli elementi siano dello stesso tipo. sum(tupla) ritorna la somma di tutti gli elementi nella tupla. Richiede che tutti gli elementi siano numeri. Nota: max e min possono funzionare anche su elementi generici, diversi da numeri (c'è però bisogno che sia definita in modo chiaro l'operazione di confronto < tra elementi di quel tipo).
Tuple di tuple Potendo contenere elementi generici, le tuple possono essere nidificate (cioè i loro elementi possono essere altre tuple). Quando accediamo agli elementi lo facciamo ancora tramite gli operatori di parentesi quadrate [] Facciamo attenzione che se abbiamo N tuple nidificate l'una dentro l'altra, dove T è quella più esterna, allora: T[i] accede alla tuple che appare come elemento all'indice i di T T[i][j] accede alla tuple che appare come elemento all'indice j di T[i] T[i][j][k] accede alla tuple che appare come elemento all'indice k di T[i][j] e così via..
Cicli I cicli servono a eseguire ripetutamente uno stesso blocco di istruzioni, che tipicamente ha un effetto diverso ogni volta che il blocco di operazioni viene eseguito. In python esistono due principali costrutti per i cicli:
While Le espressioni booleane trovano ulteriore applicazione nei costrutti per definire cicli. Cioè, in costrutti che servono a ripetere altre istruzioni finchè vale qualche condizione. Il costrutto while fa esattamente questo: ripete un'insieme di istruzioni finchè (=while) una certa condizione rimane vera. La sintassi del costrutto while è la seguente: while guardia: istruzione ... istruzioneN dove guardia è un'espressione booleana e le istruzioni da ripetere devono essere indentate come per il costrutto if.
For Il for è un altro costrutto per gestire i cicli. La sintassi del costrutto for è la seguente: for elemento in Iterabile: istruzione ... istruzioneN dove Iterabile è un oggetto di python il cui contenuto si può "scorrere". Nota: c'è una differenza importante tra while e for.
Per generare la sequenza da 0 a 10 ci avvaliamo della funzionalità built in di python range. La sua sintassi è la seguente range(start, stop, step), dove:
Liste Una lista è una sequenza di elementi di qualsiasi tipo. Ogni elemento ha un indice (=posizione) Se la lista contiene N elementi, allora gli indici vanno da 0 a N- Una lista è una struttura dati mutabile: gli elementi possono essere aggiunti, tolti, o modificati Quindi una lista è una struttura dati dinamica (=che può subire variazioni tramite operazioni specifiche). Nelle liste, gli operatori parentesi quadre [] si usano per:
Operazioni sulle liste I principali operatori che operano sulle liste sono i seguenti: in serve a verificare se un certo elemento è nella lista (ritorna un valore booleano) not in serve a verificare se un certo elemento non è nella lista (ritorna un valore booleano) + serve a concatenare due liste, creando come risultato una nuova lista ***** serve a concatenare N copie di una stessa lista, creando come risultato una nuova lista [] serve ad accedere ad una porzione della lista del serve ad eliminare una porzione della lista
Metodi delle liste Le liste mettono a disposizione dei metodi che si usano con la sintassi lista.metodo(parametri). Inserimento .append(elemento) modifica la lista aggiungendo elemento in coda .insert(indice, elemento) modifica la lista aggiungendo elemento alla posizione specificata da indice e spostando di una posizione tutti gli elementi a destra di quella posizione. Nota:
Cancellazione .pop() modifica la lista rimuovendo e ritornando l'elemento in coda alla lista .pop(indice) modifica la lista rimuovendo e ritorna l'elemento in posizione indice .remove(elemento) modifica la lista rimuovendo la prima occorrenza di elemento nella lista. Ritorna un errore se l'elemento non è presente.
Altro .count(elemento) conta il numero di occorrenze di elemento nella lista .index(elemento) ritorna l'indice della prima occorrenza dell'elemento nella lista (oppure un errore se l'elemento non c'è nella lista) .sort(reverse=False) ordina gli elementi della lista. Se la lista contiene stringhe, queste vengono ordinate in ordine lessicografico. Se il parametro reverse è =False (o non è specificato), allora l'ordine degli elementi è dal più piccolo al più grande; Se il parametro reverse è =True, allora l'ordine degli elementi è dal più grande al più piccolo. .reverse() modifica la lista rovesciando l'ordine degli elementi
Funzioni sulle liste Alcune funzioni prendono come parametro una lista e ritornano il risultato di qualche calcolo. Le funzioni il cui uso si può ritenere frequente sono le seguenti: len(lista) ritorna la lunghezza (corrente) di una lista min(lista) ritorna l'elemento più piccolo nella lista. Richiede che tutti gli elementi siano dello stesso tipo. max(lista) ritorna l'elemento più grande nella lista. Richiede che tutti gli elementi siano dello stesso tipo. sum(lista) ritorna la somma di tutti gli elementi nella lista. Richiede che tutti gli elementi siano numeri. Nota: max e min possono funzionare anche su elementi generici, diversi da numeri (c'è però bisogno che sia definita in modo chiaro l'operazione di confronto < tra elementi di quel tipo).
Attraversamento di una lista Gli elementi di una lista possono essere visitati tutti con un ciclo:
Liste di Liste Potendo contenere elementi generici, le liste possono essere nidificate (cioè i loro elementi possono essere altre liste). Quando accediamo agli elementi lo facciamo ancora tramite gli operatori di parentesi quadrate [] Facciamo attenzione che se abbiamo N liste nidificate l'una dentro l'altra, dove L è quella più esterna, allora: L[i] accede alla lista che appare come elemento all'indice i di L L[i][j] accede alla lista che appare come elemento all'indice j di L[i] L[i][j][k] accede alla lista che appare come elemento all'indice k di L[i][j] e così via.. Un'applicazione immediata quando quando abbiamo una lista di liste è quindi la possibilità di gestire matrici (=tabelle).
Stringhe e liste Data una stringa si può creare una lista che ha come elementi i caratteri della stringa. Per fare ciò si usa la funzione list a cui si passa la stringa come parametro. ESEMPIO: s = 'Hate to see you go' caratteri = list(s) print(caratteri)
Data una stringa è anche possibile creare una lista che contiene tanti elementi quante le parole della stringa. Per fare ciò si usa il metodo split delle stringhe che opzionalmente può prendere come parametro un delimitatore che dice dove finisce una parola. Di default il delimitatore è lo spazio. E l' operazione inversa dello split (costruire una stringa da una lista) si chiama join. La sintassi è delimitatore.join(lista) dove delimitatore è una stringa che farà da delimitatore tra un elemento e l'altro di lista. Anche sulle stringhe possiamo usare gli operatori di confronto. In generale, == e != testano se due stringhe sono uguali o diverse, rispettivamente. Invece l'operatore < testa se una stringa viene prima
Insiemi Un insieme è una collezione non ordinata di elementi di qualsiasi tipo senza duplicati. Un insieme è una struttura dati mutabile: gli elementi possono essere aggiunti, tolti, o modificati Un insieme vuoto si crea con l'istruzione set() Un insieme che contiene elementi si crea con {elemento1, ..., elementoN}. Quindi un insieme è una struttura dati dinamica (=che può subire variazioni tramite operazioni specifiche).
Operazioni sugli insiemi I principali operatori che operano sigli insiemi sono i seguenti: in serve a verificare se un certo elemento è nell'insieme (ritorna un valore booleano) not in serve a verificare se un certo elemento non è nell'insieme (ritorna un valore booleano) == serve a verificare se l'insieme che appare a sinistra di == contiene gli stessi elementi dell'insieme che appare a destra di == != serve a verificare se l'insieme che appare a sinistra di != contiene gli stessi elementi dell'insieme che appare a destra di != <= serve a verificare se l'insieme che appare a sinistra di <= è un sottoinsieme dell'insieme che appare a destra di <= < serve a verificare se l'insieme che appare a sinistra di < è un sottoinsieme stretto dell'insieme che appare a destra di < >= serve a verificare se l'insieme che appare a sinistra di >= è un sovrainsieme dell'insieme che appare a destra di >= > serve a verificare se l'insieme che appare a sinistra di > è un sovrainsieme stretto dell'insieme che appare a destra di > | serve a calcolare l'unione tra due insiemi, creando come risultato un nuovo insieme & serve a calcolare l'intersezione tra due insiemi, creando come risultato un nuovo insieme
Metodi degli insiemi Gli insiemi mettono a disposizione dei metodi che si usano con la sintassi insieme.metodo(parametri). Tra i più comuni troviamo i seguenti: .add(elemento) aggiunge elemento all'insieme .remove(elemento) rimuove elemento all'insieme. Ritorna un errore se elemento non è presente nell'insieme .pop() rimuove e ritorna un elemento a caso dall'insieme. .clear() rimuove tutti gli elementi dall'insieme. .isdisjoint(altro_insieme) ritorna True se l'insieme a cui viene applicato il metodo è disgiunto (=non ha elementi in comune) dall'insieme passato come parametro
Funzioni sugli insiemi Alcune funzioni prendono come parametro un insieme e ritornano il risultato di qualche calcolo. Le funzioni il cui uso si può ritenere frequente sono le seguenti: len(insieme) ritorna il numero di elementi (correnti) di un insieme min(insieme) ritorna l'elemento più piccolo nell' insieme. Richiede che tutti gli elementi siano dello stesso tipo e confrontabili.
max(insieme) ritorna l'elemento più grande nell'insieme. Richiede che tutti gli elementi siano dello stesso tipo e confrontabili. sum(insieme) ritorna la somma di tutti gli elementi nell'insieme. Richiede che tutti gli elementi siano numeri. Nota: max e min possono funzionare anche su elementi generici, diversi da numeri (c'è però bisogno che sia definita in modo chiaro l'operazione di confronto < tra elementi di quel tipo).
Attraversamento di un insieme Gli elementi di un insieme possono essere visitati tutti con un ciclo for perché un insieme è una struttura iterabile. Non si può usare il while perché la struttura dati non è ordinata.
Dizionari Un dizionario è una struttura dati non ordinata Un dizionario è una struttura dati mutabile: gli elementi possono essere aggiunti, tolti, o modificati Un dizionario contiene un insieme di indici chiamati chiavi e una raccolta di valori. In un dizionario ogni chiave è unica ed è associata ad uno ed un solo valore (ma chiavi diverse possono essere associate allo stesso valore) Le chiavi non sono necessariamente numeri interi: possono anche essere a stringhe, tuple, booleani, ecc.. Gli elementi di un dizionario sono quindi coppie di elementi chiave-valore Un dizionario vuoto si definisce con l'istruzione dict() Un dizionario che contiene degli elementi con l'istruzione {chiave1 : valore1, ..., chiaveN : valoreN} Quindi un dizionario è una struttura dati dinamica (=che può subire variazioni tramite operazioni specifiche)
Operazioni sui dizionari I principali operatori che operano sui dizionari sono i seguenti: in serve a verificare se una certa chiave è nell'insieme (ritorna un valore booleano) not in serve a verificare se una certa chiave non è nell'insieme (ritorna un valore booleano) == serve a verificare se il dizionario che appare a sinistra di == contiene gli stessi elementi del dizionario che appare a destra di == != serve a verificare se il dizionario che appare a sinistra di != non contiene gli stessi elementi del dizionario che appare a destra di != [chiave] permette accesso in lettura e scrittura del rimuove l'elemento chiave-valore dal dizionario
Metodi dei dizionari I dizionari mettono a disposizione dei metodi che si usano con la sintassi dizionario.metodo(parametri). Tra i più comuni troviamo i seguenti: .keys() ritorna le chiavi del dizionario (attenzione: non è una copia) .values() ritorna i valori del dizionario (attenzione: non è una copia) .items() ritorna tutti gli elementi (coppie chiave-valore) del dizionario (attenzione: non è una copia) .pop(key, default) rimuove e ritorna il valore associato alla chiave key:
Alias e oggetti in memoria Un oggetto è qualcosa a cui una variabile può fare riferimento. Un oggetto ha un tipo e un valore. Quando vogliamo verificare se due variabili contengono lo stesso valore usiamo l'operatore ==. Quando vogliamo verificare se due variabili si riferiscono allo stesso oggetto usiamo l'operatore is. Quindi, se x is y è True allora x == y è sicuramente True, ma il viceversa non vale in generale. Un oggetto che ha più riferimenti (più variabili che si riferiscono a lui) ha degli alias. Dobbiamo fare attenzione con gli alias e non pensare che abbiamo in mano più copie diverse dello stesso oggetto. Dobbiamo ricordare che confrontare il contenuto di due oggetti a cui due variabili si riferiscono non è la stessa cosa che confrontare se le due variabili si riferiscono allo stesso oggetto. Partiamo dai tipi di base che abbiamo visto all'inizio: int, float, string. Quando creiamo due variabili x e y che si riferiscono allo stesso valore (dello stesso tipo) abbiamo due possibili situazioni: vengono creati in memoria due oggetti (con lo stesso tipo e valore) e quindi x e y sono alias per oggetti diversi. viene creato in memoria un oggetto unico e quindi x e y sono alias per quello stesso oggetto L'identificatore di un oggetto si ottiene tramite la funzione id che ritorna un numero intero per l'oggetto che rimane costante per tutta l'esecuzione del programma.
In generale , abbiamo garanzia che due variabili x e y siano alias di uno stesso oggetto solo se x is y ritorna True. Supponiamo ora che due variabili x e y siano alias di uno stesso oggetto. Cosa succede se proviamo a cambiare l'oggetto riferito lavorando su uno dei due alias?
Funzioni Fino a questo momento ogni nostro programma python conteneva tutte le istruzioni necessarie a risolvere qualche problema specifico. Per rendere più strutturato il nostro codice possiamo dividere il nostro programma in sotto-programmi che risolvono task specifici. Una funzione è una sequenza di istruzioni che esegue un calcolo specifico Una funzione ha un nome, dei parametri, e può produrre o meno un risultato Una funzione deve essere chiamata per essere eseguita Una funzione si specifica con la seguente sintassi: def nome(parametri): istruzione ... instruzioneN Abbiamo già avuto modo di vedere diverse funzioni: type(), print(), int(), min(), max(), sum(), ecc...
Funzioni che non producono risultati Iniziamo con il mostrare come suddividere il codice in funzioni. Supponiamo di voler stampare a schermo il messaggio: Benvenuto al corso di python! Se vogliamo definire una funzione che lo fa per noi possiamo fare così: ESEMPIO: def benvenuto(): print('Benvenuto al corso di python!') benvenuto() # ecco come si chiama la funzione: non ha parametri e non produce nessun risultato
I parametri sono passati per riferimento Se qualche parametro passato alla funzione è una struttura dati mutabile e la funzione modifica la struttura dati, allora quella modifica avrà effetto anche al di fuori della funzione. Si dice che il chiamante (punto dell'esecuzione dal quale la funzione è stata chiamata) vede la modifica.
Variabili locali Le funzioni possono definire delle variabili al loro interno. Se lo fanno, queste variabili sono locali (= non esistono al di fuori della funzione).
Variabili globali Le funzioni possono usare delle variabili che esistono prima della loro chiamata. Se lo fanno, queste variabili sono globali (= non sono dichiarate dalla funzione).
Funzioni che producono risultati Quando vogliamo che la nostra funziona produca il risultato di qualche calcolo vogliamo che ritorni un valore. Tale obiettivo si raggiunge con l'istruzione return valore inserita nei punti opportuni della funzione (tipicamente alla fine). Nota: quando una funzione non non usa l'istruzione return (come quelle sopra) per convenzione ritorna sempre il valore speciale None.