Funzioni Python

Da Hacknowledge.

Le funzioni in Python si dichiarano, come visto, con la parola "def".
Riprendiamo l'esempio dell'hello world per vedere come si dichiara una funzione:

def stampa_hello_world():
    print "hello world"
stampa_hello_world()

Come detto, la sintassi generale è

  def nome_funzione([argomenti]):
        codice della funzione

dove def è la parola riservata che indica che si sta dichiarando una funzione, nome_funzione è ovviamente il nome che daremo alla nostra funzione, argomenti saranno gli argomenti che bisognerà passare (sono facoltativi, vedremo tra un attimo), i : indicano l'inizio di un blocco identato e codice della funzione che è tutto il codice che andrà eseguito dalla funzione.
N.B. Ricordarsi che python non usa le parentesi graffe {} per identare i blocchi, ma i rientri.
Passiamo ora agli argomenti della funzione.Questi argomenti sono variabili, o valori che vengono passati alla funzione e che la funzione userà per restituirci un "qualcosa".
Nel primo esempio non ci sono argomenti in quanto non ce n'era bisogno.
Vediamo ora un esempio più concreto e utile di come funzionano e a cosa servono gli argomenti: creiamo un programma con una funzione che faccia la somma tra 2 numeri passati come argomento e ci stampi il risultato.

def somma(primo_numero,secondo_numero):
      print primo_numero+secondo_numero
somma(2,3)

Analizziamo il codice: come argomenti della funzione somma ci sono primo_numero e secondo_numero, che corrispondono poi al 2 e 3 passati quando viene richiamata la funzione. Notiamo inoltre che primo_numero e secondo_numero sono variabili a tutti gli effetti, e come tali vengono usate nella print.
Miglioriamo il codice aggiungendo l'input dell'utente, in modo da rendere la funzione più utile.

def somma(primo_numero,secondo_numero):
      print primo_numero+secondo_numero
a = int(raw_input("Primo numero: "))
b = int(raw_input("Secndo numero: "))
somma(a,b)

Aggiungiamo quindi le variabili a e b che conterrano l'input inserito dall'utente, che saranno passate alla funzione somma(). Come si può notare, prima avevamo passato direttamente dei numeri alla funzione, ora delle variabili, ma il risultato non cambia.
Con questa funzione il risultato viene stampato direttamente. Mettiamo invece di voler salvare il risultato in una variabile da usare in seguito.

def somma(primo_numero,secondo_numero):
     somma = primo_numero+secondo_numero
     return somma
a = int(raw_input("Primo numero: "))
b = int(raw_input("Secondo numero: "))
somma = somma(a,b)
print somma

Abbiamo tolto quindi la print dall'interno della funzione e abbiamo inserito un return somma. Così possiamo "esportare" il valore di somma all'esterno della funzione. La return rende quindi valida la scrittura somma = somma(a,b). Se proviamo a toglere la return vedremo come somma varrà "None", ovvero nulla: senza return a somma non viene quindi passato il valore che ha somma dentro la funzione.

[modifica] Le funzioni lambda

Un tipo di funzione particolare sono le funzioni lambda. Derivate dal Lisp, permettono di dichiarare brevi funzioni semplici su una una riga.
Esempio:

  • funzione dichiarata con la procedura vista sopra
def funzione(x):
     return x*2
  • funzione lambda
f=lambda x: x*2

Come si può notare è molto più corta.
Il vantaggio della funzione lambda è essenzialmente quello di essere molto breve e non serve dichiararla prima. Utile quando una funzione serve una sola volta e deve svolgere piccole operazioni. Di contro però una funzione lambda non può eseguire comandi. Per funzioni più complesse di una operazione è meglio usare le funzioni come dichiarate prima.

Strumenti personali