Lezioni di Python – 3.3 Argomenti delle funzioni

Lezioni di Python - 3.3 Argomenti delle funzioni

Passare degli argomenti alle funzioni

Nella sezione precedente abbiamo visto come definire una funzione che generi su output i primi 10 numeri della sequenza di Fibonacci. Se analizziamo bene la funzione appena creata risulta subito qualcosa che non è proprio così efficiente. Infatti la funzione ha una staticità che ben non si addice a questo tipo di funzione.

Infatti la funzione che abbiamo scritto fa sempre la stessa cosa: generare i primi 10 numeri della serie di Fibonacci. Ma se volessimo stampare n numeri di Fibonacci, e al momento della definizione della funzione non sappiamo bene che valori abbia questo n?

Bene possiamo passare la variabile n come argomento della funzione. Spetterà poi alle operazioni interne alla funzione a gestire correttamente questo valore. Abbiamo introdotto la dinamicità di una funzione.

Al momento della dichiarazione della funzione non sappiamo quante numeri di Fibonacci generare,

def fibonacci (n):
...

ma solo al momento della chiamata decideremo quanti valori generare.

fibonacci(7)

oppure

n = 7
fibonacci(n)

Vediamo come modificare la dichiarazione della funzione precedente:

def fibonacci(x):
    i = 1
    n1 = 0
    n2 = 1
    print ( n1 + n2)
    while i < x:
        n = n1 + n2
        print( n )
        n1 = n2
        n2 = n
        i += 1

n = 7
fibonacci(n) 

Eseguendo il codice sopra otterremo i primi 7 numeri della serie di Fibonacci

>>>
1
1
2
3
5
8
13

Visibilità delle variabili

Nota: Ho utilizzato appositamente la variabile n come argomento della funzione per farvi capire un altro concetto fondamentale. La variabile n utilizzata all’esterno della funzione non ha niente a che fare con la variabile n utilizzata all’interno della funzione per il calcolo dei numeri di Fibonacci. Questo è legato al concetto della visibilità delle variabili. Le variabili definite all’esterno della funzione hanno valore anche all’interno della funzione, le variabili utilizzate internamente alla funzione non hanno visibilità all’esterno (non possono essere utilizzate all’esterno) e si distruggono non appena l’esecuzione esce fuori dalle operazioni interne alla funzione. Le variabili definite all’interno della funzione vengono create per poter essere utilizzate limitatamente allo svolgimento della funzione.

Vediamo meglio questo concetto:

Le variabili definite esternamente alla funzione sono visibili anche all’interno (senza essere passate come argomenti):

a = 3
def foo():
    print(a)

foo()
>>>
3 

ma non sono modificabili all’interno della funzione

a = 3
def foo():
    print(a)

a = 1
print(a)
print(a)
foo()
print(a)
>>>
1
3 

Al momento che andiamo a fare una assegnazione sulla variabile a all’interno della funzione, andiamo a creare una nuova variabile con lo stesso nome. In questo modo il valore della variabile a esterno rimane immutato.

Domanda interessante

Ma se le variabili definite esternamente hanno visibilità anche all’interno, perché passare gli argomenti ad una funzione? Non li possiamo utilizzare direttamente all’interno?

Parametri ed argomenti

Generalmente questi due termini vengono utilizzati indiscriminatamente, in realtà ci sono delle differenze. I parametri sono le variabili utilizzate nella definizione di una funzione, e gli argomenti sono i valori posti nella chiamata di una funzione.

⇐ Vai a Lezione 3.2 – Funzioni

Vai a Lezione 3.4 – Valori restituiti dalle funzioni 

1 commento su “Lezioni di Python – 3.3 Argomenti delle funzioni

  1. ladecisionegiusta

    ci sono delle difficoltà a visualizzare correttamente la formattazione del listato.
    ma p giusto: print(a)a=1
    mancano spazi e punti e virgola, perchè mi restituisce errore

Lascia un commento