Python le funzioni

Le funzioni sono raggruppamenti di istruzioni che prendono in ingresso un insieme di valori detti parametri e restituiscono un risultato come elaborazione dei parametri stessi.

Le funzioni sono uno strumento importante, poiché:

  • permettono il riutilizzo del codice, infatti funzioni usate molte volte in un programma possono essere inglobate in un unica funzione.
  • permettono di strutturare il codice del programma in blocchi omogenei dal punto di vista logico al fine di migliorare il lavoro del programmatore.

La sintassi per la definizione di una funzione è la seguente:

def nome_funzione(<lista parametri divisi da virgola>):
<blocco di istruzioni>
return <risultato> # opzionale

Una volta definita una funzione in questo modo è possibile richiamarla semplicemente invocando il suo nome, seguito dalla lista di valori che si intende passare come parametri.
Faccio un esempio creando una funzione che esegue il quadrato di un numero.

def quadrato(valore):
ris = valore * valore
return ris

a = 5
print quadrato(a)

Eseguendo questo programma il risultato sara' 25. Le prime tre righe definiscono la funzione quadrato. Da questo momento in poi il nome "quadrato" diventa parte del namespace del modulo corrente (l'insieme dei nomi significativi all'interno del modulo).
Richiamando la funzione, il valore passato come parametro viene trasferito alla funzione attraverso il nome del parametro ("valore"), viene eseguita la funzione e viene restituito il risultato al modulo chiamante.
Tutto questo permette di incapsulare nel nome "quadrato" una operazione più complessa.

Introducendo le funzioni si devono distinguere le "variabili locali alle funzioni" (quindi utilizzabili solo da esse) e le "variabili globali", ossia appartenenti al namespace del modulo (quindi utilizzabili al di fuori della funzione).
Quando si richiama una funzione vengono trasferiti i valori delle variabili ai parametri delle funzioni. Questo permette alla funzione di venire a conoscenza di informazioni proveniente dal blocco chiamante. In genere nei linguaggi di programmazione esistono due modalita' di passaggio:

  • Passaggio per valore: Viene trasferito alla funzione solo una copia della variabile, quindi la funzione non può alterare il valore di quella variabile.
  • Passaggio per riferimento: In questo caso viene trasferita la variabile vera e propria e quindi la funzione può alterare il valore della variabile.

In python i parametri passati alle funzioni sono sempre trasferiti per valore. Questo a differenza di altri linguaggi, come il C e il Pascal, dove si possono passare i parametri anche per riferimento.
Infatti 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 (cioe' 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.
Chiariamo questo curioso concetto con un esempio:

def funzione1():
x = 20 # variabile locale con lo stesso nome
print x # verra' visualizzato 20 e non 10
print y # verra' visualizzato 19

x = 10 # variabili globale
y = 19
funzione1()

Il discorso cambia radicalmente per le strutture dati mutabili, le quali possono essere modificate all'interno delle funzioni.
Esse infatti non sono delle vere e proprie variabili e quindi passibili di modifiche.

è possibile introdurre dei parametri che hanno la caratteristica di essere facoltativi, infatti essi assumono un valore prestabilito se non vengono indicati.
Vediamo un esempio per spiegare la semplice sintassi da utilizzare:

def funzione2(a,b = 30):
print a, b

x = 10
y = 19
funzione2(x)
funzione2(x,y)

La funzione denominata "funzione2" ha due parametri: a e b. Essa viene invocata due volte:

  • Il risultato della prima chiamata sara' 10, 30, infatti il parametro b, non essendo indicato, assume il valore 30.
  • Il risultato della seconda chiamata sara' 10, 19.

 

Nel linguaggio pascal si distinguono le funzioni dalle procedure. Le procedure sono delle funzioni che non restituiscono alcun risultato.
In python si possono implementare facilmente delle procedure, è sufficiente non introdurre l'istruzione return alla fine della funzione. In questo modo la funzione non restituisce alcun valore al blocco chiamante.

Info su Francesco Bragadin

Insegno informatica e telecomunicazioni al liceo scienze applicate ed all'indirizzo informatica e telecomunicazioni. Ho terminato gli studi in ingegneria elettronica e telecomunicazioni lavorando per molti anni come libero professionista nell'ambito della gestione storage e disaster recovery su mainframe.
Questa voce è stata pubblicata in Uncategorized. Contrassegna il permalink.

2 risposte a Python le funzioni

  1. Aleksander Suli 2a L scrive:

    prof. io ho cercato di riprodurre questa funzione, ma sul mio pc non funziona, mi evidenzia il ris e mi dice: expected an indented block (versione python : 3.6.3; versione windows: 10 Pro 64-bit;)

    def quadrato(valore):
    ris = valore * valore
    return ris

    a = 5
    print quadrato(a)

    • Francesco Bragadin scrive:

      tutto quello che sta all'interno della funzione deve essere spostato a destra e non nella stessa colonna della parola def.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *