Prima di analizzare “Le funzioni in Python” parliamo di un altro importante aspetto del linguaggio che sono le List Comprehension, i Dict Comprehension e i Set Comprehension.
LIST COMPREHENSION
Le List Comprehension sono un meccanismo che permette, a partire da una lista o qualsiasi oggetto iterabile, di produrne un’altra in un’unica istruzione eseguendo un’elaborazione a partire dalla lista di origine. La parte centrale di questa istruzione dovrebbe essere familiare, si tratta di un ciclo for in che scorre la collezione posta in iterable. Ogni elemento estratto viene posto nella variabile item. Alla destra compare una struttura condizionale if condition. Questo significa che ad ogni iterazione viene valutata questa condizione e solamente se True l’elemento corrente viene messo in item, altrimenti viene scartato. La condizione è facoltativa. Expression è una regola che viene applicata ad item affinché produca un valore che entra nella lista di destinazione.
ESEMPIO LIST COMPREHENSION
Riporto un esempio per chiarire i concetti sopra esposti.
DICT COMPREHENSION
È un meccanismo utilizzato per produrre un dizionario a partire da qualsiasi oggetto iterabile. Le chiavi e i valori del dizionario sono ottenuti tramite un’elaborazione dell’oggetto iterabile di origine.
ESEMPIO DICT COMPREHENSION
L’istruzione pow(n,1/2) calcola la radice quadrata di n.
SET COMPREHENSION
Costruisce un insieme a partire da qualsiasi oggetto iterabile (Lista, Stringa, Dizionario, etc.). L’espressione produce un nuovo elemento dell’insieme. Se l’elemento prodotto è duplicato Python lo scarta automaticamente.
ESEMPIO SET COMPREHENSION
Riporto un semplice esempio.
LE FUNZIONI
Una funzione è costituita da un insieme di istruzioni o statement, a cui viene assegnato un nome. E’ richiamabile in altri parti del programma, essa è un oggetto, ricordiamoci che tutto in Python è un oggetto.
Il primo step per utilizzare le funzioni è quello di definirle. Per definire una function occorre indicare i parametri se ne prevede, scrivere le istruzioni nel body e assegnargli un nome. Una volta definita seguendo i passi esposti essa può essere richiamata. La parola chiave nell’header è def che significa defined function. Function name è l’identificatore, il nome che stiamo assegnando alla funzione. I parametri sono un elenco opzionale di nomi racchiusi tra parentesi tonde. Essi verranno assegnati al momento in cui chiamiamo la funzione e passiamo gli argomenti. Se la funzione non prevede parametri la coppia di parentesi tonde va comunque indicata.
PARAMETRI
I parametri, a volte anche di default, sono i nomi dei valori che vengono passati quando si invoca la funzione in Python.
PARAMETRI POSIZIONALI
Ogni volta che chiamiamo una funzione con parametri posizionali dobbiamo fornire obbligatoriamente i valori.
ESEMPIO PARAMETRI POSIZIONALI
PARAMETRI KEYWORD
Con i parametri Keyword Python riesce a ricomporre l’ordine. Il vantaggio dei parametri keyword è quello di specificarli in un ordine diverso. Python riesce ricostruire il giusto ordine perché nella chiamata vengono definiti i nomi dei parametri. Se si chiama una funzione fornendo contemporaneamente dei parametri posizionali e dei parametri keyword, i parametri posizionali devono sempre precedere i parametri keyword.
ESEMPIO DI PARAMETRI KEYWORD
PARAMETRI OPZIONALI
I parametri obbligatori se ci sono, possono essere seguiti da parametri opzionali. Avendo assegnato direttamente al momento della dichiarazione un valore di default i chiamanti della funzione se specificano i parametri opzionali questi andranno a sostituire quelli di default. Viceversa se non vengono specificati parametri opzionali al momento di invocare la funzione verranno usati i valori di default.
ESEMPIO PARAMETRI OPZIONALI
PARAMETRI *ARGS
Sono definiti con il simbolo di asterisco seguito da un nome, solitamente args. Con questa definizione si possono specificare un numero arbitrario di parametri posizionali. Stampando args si vede il contenuto di una una tupla creata a partire dai parametri forniti.
ESEMPIO PARAMETRI *ARGS
Riporto un esempio.
Python in questo caso crea un dizionario con le chiavi fornite dai nomi di parametro e valori quelli forniti.
LO STATEMENT RETURN
Tutte le funzioni in Python ritornano sempre un valore o in modo implicito ma anche in modo esplicito. Lo statement return può essere indicato solo nella suite di istruzioni che contengono il corpo di codice della funzione stessa. In questo esempio return è seguita da un’espressione che calcola la somma di a e b. Se non indichiamo un valore nello statement return Python torna al chiamante comunque un valore che in questo caso è None che significa mancanza di un valore. Chi chiama la funzione può testare tramite un test condizionale se la funzione ritorna None.
Anche in caso di mancanza di istruzione return, se il corpo della funzione termina, Python restituisce None.
CHIAMARE UNA FUNZIONE
Una volta definita una funzione possiamo chiamarla da una o più parti del codice.
function_name(arguments)
Il passaggio dei parametri avviene per riferimento. Bisogna fare una distinzione: se l’oggetto passato come valore al parametro è di tipo mutabile o immutabile.
OGGETTI IMMUTABILI
Un int passato alla funzione è un oggetto immutabile, al ritorno dalla funzione stampando il valore di y ci accorgiamo che il suo valore è rimasto inalterato, questo perché y è un oggetto immutabile (non modificabile) e non viene alterato dalla funzione.
OGGETTI MUTABILI
Essendo un dizionario per sua natura mutabile questa volta il passaggio per riferimento ha un comportamento diverso. Alla chiave ‘func’ di valore 10 viene aggiunto al dizionario anche il valore passato d.
#DEFINE A FUNCTION THAT SELECTS THE DISTINCT ELEMENTS #OF TWO LISTS. THE SECOND HAS DEFAULT VALUE [6,7,8,9,10]. #COLCULAR SUM AND SQUARE ROOT OF THE SELECTED ELEMENTS. import math def funcliste(l1,l2=[6,7,8,9,10]): lresult=[] somma=0 for x in l2: if not x in l1: lresult.append(x) somma+=x for x in l1: if not x in l2: lresult.append(x) somma+=x print(f'Risultato: {lresult}') print(f'Somma: {somma}') print(f'Radice Quadrata: {math.sqrt(somma)}') return lresult funcliste([1,2,3,4,5],[2,4,8])
APPROFONDIMENTO
In Python, le funzioni sono blocchi di codice riutilizzabili che eseguono un’operazione specifica. Le funzioni possono accettare input sotto forma di parametri e restituire output. I parametri delle funzioni in Python possono essere di vari tipi, ognuno con caratteristiche specifiche. Ecco una panoramica dettagliata:
1. Funzioni in Python
• Definizione: Le funzioni in Python sono definite utilizzando la parola chiave def, seguita dal nome della funzione e da una coppia di parentesi tonde (), che possono contenere i parametri. Il blocco di codice della funzione è indentato.
• Sintassi base:
def nome_funzione(parametri):
# Blocco di codice
return valore # (opzionale)
• Esempio:
def saluta(nome):
return f”Ciao, {nome}!”
messaggio = saluta(“Alice“)
print(messaggio) # Output: Ciao, Alice!
2. Tipi di Parametri
Python supporta diversi tipi di parametri nelle funzioni, ognuno con un comportamento particolare:
2.1 Parametri Posizionali (Positional Arguments)
• Descrizione: Sono i parametri più comuni. Vengono passati alla funzione nell’ordine in cui sono definiti. L’ordine è cruciale: il primo argomento passato alla funzione viene assegnato al primo parametro, il secondo al secondo parametro, e così via.
• Esempio:
def moltiplica(a, b):
return a * b
risultato = moltiplica(2, 3) # 2 viene assegnato ad a, 3 a b
print(risultato) # Output: 6
2.2 Parametri Nominali (Keyword Arguments)
• Descrizione: Permettono di passare i valori ai parametri specificandone il nome, indipendentemente dalla loro posizione. Sono utili per migliorare la leggibilità del codice e quando si vogliono specificare solo alcuni dei parametri.
• Esempio:
def saluta(nome, messaggio=”Ciao“):
return f”{messaggio}, {nome}!”
print(saluta(nome=”Alice“, messaggio=”Buongiorno“)) # Output: Buongiorno, Alice!
print(saluta(nome=”Bob“)) # Output: Ciao, Bob!
2.3 Parametri Predefiniti (Default Arguments)
• Descrizione: Sono parametri a cui viene assegnato un valore predefinito. Se l’argomento corrispondente non viene passato alla funzione, il parametro utilizza il valore predefinito.
• Esempio:
def saluta(nome, messaggio=”Ciao“):
return f”{messaggio}, {nome}!”
print(saluta(“Alice“)) # Output: Ciao, Alice! (messaggio usa il valore predefinito)
print(saluta(“Bob“, “Buongiorno“)) # Output: Buongiorno, Bob!
2.4 Parametri Arbitrari Posizionali (Arbitrary Positional Arguments)
• Descrizione: Utilizzando un asterisco * prima del nome del parametro, si può passare un numero variabile di argomenti posizionali alla funzione. Questi argomenti vengono raccolti in una tupla all’interno della funzione.
• Esempio:
def somma(*numeri):
return sum(numeri)
print(somma(1, 2, 3, 4)) # Output: 10
print(somma(5, 10)) # Output: 15
2.5 Parametri Arbitrari Nominali (Arbitrary Keyword Arguments)
• Descrizione: Utilizzando due asterischi ** prima del nome del parametro, si può passare un numero variabile di argomenti nominali (keyword arguments) alla funzione. Questi argomenti vengono raccolti in un dizionario.
• Esempio:
def descrizione(**info):
return info
print(descrizione(nome=”Alice“, età=25, lavoro=”Ingegnere“))
# Output: {‘nome’: ‘Alice’, ‘età’: 25, ‘lavoro’: ‘Ingegnere’}
3. Uso delle Funzioni
Le funzioni sono utilizzate per evitare la duplicazione del codice, modularizzare i programmi e migliorare la leggibilità. È importante scegliere i parametri appropriati in base all’utilizzo previsto della funzione e alla flessibilità richiesta.
4. Funzioni Anonime (Lambda Functions)
•Descrizione: Le funzioni lambda sono funzioni anonime e leggere, definite con la parola chiave lambda. Sono usate principalmente per operazioni semplici che richiedono una funzione ad hoc.
•Esempio:
somma = lambda x, y: x + y
print(somma(3, 5)) # Output: 8
Questa panoramica copre i vari tipi di parametri nelle funzioni Python, aiutando a comprendere quando e come utilizzarli efficacemente.
Lascia un commento