Funzioni in Python

Funzioni in Python

Questo articolo spiega le funzioni in Python.

YouTube Video

Funzioni in Python

Le funzioni in Python sono una funzionalità essenziale per definire blocchi di codice riutilizzabili, consentendoti di organizzare e semplificare il tuo programma richiamandole secondo necessità. L'uso delle funzioni può migliorare la leggibilità del codice e rispettare il principio DRY (Don't Repeat Yourself, evitare di scrivere lo stesso codice più volte).

Definire le Funzioni

Le funzioni sono definite utilizzando la parola chiave def. La sintassi di base è la seguente:.

1def function_name(arg1, arg2, ..., argN):
2    """docstring (A brief description of the function)"""
3    processing
4    return return_value

Ad esempio, per definire una funzione che somma due numeri, scriveresti:.

1def add(x, y):
2    """A function that adds two numbers and returns the result"""
3    return x + y

Richiamare le Funzioni

Una funzione definita può essere richiamata e utilizzata come segue:.

1result = add(3, 4)
2print(result)  # Output: 7

Componenti di una Funzione

  1. Nome della Funzione: Il nome della funzione, utilizzato per richiamarla.

  2. Argomenti (Parametri): Nomi di variabili che ricevono i dati passati durante la chiamata. Puoi definire zero o più argomenti.

  3. Stringa di documentazione (Docstring): Una stringa utilizzata per descrivere lo scopo e l'utilizzo di una funzione. Opzionale.

  4. Corpo della Funzione: Un blocco indentato in cui sono scritte le istruzioni eseguite dalla funzione.

  5. Valore di Ritorno: Il valore restituito al chiamante utilizzando l'istruzione return. Se return viene omesso, viene restituito None per impostazione predefinita.

Tipi di Argomenti

In Python, esistono diversi tipi di argomenti.

  1. Argomenti Posizionali: Il metodo standard per passare argomenti alle funzioni.
  2. Argomenti Predefiniti: Argomenti con valori predefiniti che possono essere omessi durante la chiamata.
1def greet(name, message="Hello"):
2    print(f"{message}, {name}")
3
4greet("Alice")  # "Hello, Alice"
5greet("Bob", "Good morning")  # "Good morning, Bob"
  1. Argomenti di lunghezza variabile: *args per ricevere più argomenti posizionali come una tupla, e **kwargs per riceverli come un dizionario.
1def func(*args, **kwargs):
2    print("args:", args)
3    print("kwargs:", kwargs)
4
5func(1, 2, 3, a=4, b=5)
6# Output:
7# args: (1, 2, 3)
8# kwargs: {'a': 4, 'b': 5}

Utilizzando correttamente le funzioni, puoi scrivere programmi Python in modo più efficace ed efficiente.

Funzioni Lambda in Python

In Python, le funzioni lambda sono utilizzate per definire funzioni anonime e concise. A differenza delle funzioni definite con la parola chiave def, lambda permette di creare funzioni brevi in una sola riga. Qui spiegheremo in dettaglio le funzioni lambda in Python.

Basi delle funzioni lambda

Le funzioni lambda, chiamate anche funzioni anonime, sono utilizzate per definire funzioni temporanee prive di nome, come suggerisce il nome. La sintassi di base è la seguente:.

1lambda arguments: expression
  • arguments: Specifica gli argomenti della funzione. È possibile specificare più argomenti, separandoli con una virgola.
  • expression: Questa è un'espressione che viene valutata in base agli argomenti. Il risultato dell'espressione diventa il valore di ritorno della funzione.

Ad esempio, il codice seguente definisce ed esegue una funzione lambda che somma due numeri.

1add = lambda x, y: x + y
2print(add(5, 3))  # Output: 8

In questo esempio, lambda x, y: x + y è una funzione lambda che accetta due argomenti, x e y, e restituisce la loro somma.

Casi d'uso delle funzioni lambda

Le funzioni lambda sono utili in situazioni in cui è necessario definire una funzione semplice al volo. Sono particolarmente comuni nei seguenti casi:.

  1. Quando vengono passate come argomenti a funzioni

    • È utile nelle funzioni di ordine superiore (funzioni che accettano altre funzioni come argomenti) quando si passano funzioni brevi e temporanee.
  2. Quando si specificano chiavi per l'ordinamento di liste

    • Sono utili per specificare criteri di ordinamento (chiavi) in funzioni come sort() o sorted().

Esempi di utilizzo nelle funzioni di ordine superiore

Esempi tipici di funzioni di ordine superiore includono map(), filter() e reduce(). Queste funzioni accettano altre funzioni come argomenti e le applicano a sequenze come liste.

1numbers = [1, 2, 3, 4, 5]
2squared = list(map(lambda x: x ** 2, numbers))
3print(squared)  # Output: [1, 4, 9, 16, 25]

In questo esempio, una funzione lambda viene passata alla funzione map() per calcolare il quadrato di ciascun numero in una lista.

Esempi di utilizzo dell'ordinamento delle liste

La funzione lambda può talvolta essere utilizzata per specificare una chiave personalizzata durante l'ordinamento di una lista. Ad esempio, il seguente codice ordina una lista di tuple in base al secondo elemento.

1pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
2pairs.sort(key=lambda pair: pair[1])
3print(pairs)
4# Output: [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]

In questo esempio, una funzione lambda è utilizzata per ordinare le tuple in base al loro secondo elemento (una stringa).

filter() e lambda

La funzione filter() viene utilizzata per filtrare elementi in una lista (o in un altro iterabile) in base a una condizione specifica.

1numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
2even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
3print(even_numbers)  # Output: [2, 4, 6, 8]

In questo esempio, i numeri pari in una lista vengono filtrati per creare una nuova lista.

lambda e reduce()

La funzione reduce() viene utilizzata per ridurre una lista a un unico valore. Può essere implementata facilmente utilizzando una funzione lambda.

1from functools import reduce
2
3numbers = [1, 2, 3, 4, 5]
4product = reduce(lambda x, y: x * y, numbers)
5print(product)  # Output: 120

In questo esempio, tutti gli elementi nella lista vengono moltiplicati insieme per produrre un risultato.

Evita di utilizzare funzioni lambda complesse

Il vantaggio delle funzioni lambda è la loro brevità, ma diventano più difficili da leggere quando utilizzate per implementare logica complessa. Pertanto, è opportuno utilizzarle per operazioni semplici che possono essere espresse in una sola riga. Per operazioni complesse, definire una funzione con def è più leggibile e più facile da mantenere.

Ad esempio, dovresti evitare di utilizzare funzioni lambda complesse come quella riportata di seguito.

1# Complex and hard-to-read lambda function
2complex_func = lambda x, y: (x * 2 + y) if x > y else (x + y * 2)

In questo caso, è meglio utilizzare una funzione definita con def, come mostrato di seguito.

1def complex_func(x, y):
2    if x > y:
3        return x * 2 + y
4    else:
5        return x + y * 2

Conclusione

Le funzioni lambda di Python sono uno strumento comodo per definire funzioni temporanee e brevi. Sono spesso utilizzate in funzioni di ordine superiore o operazioni sulle liste per definire in modo conciso condizioni specifiche. Tuttavia, le funzioni lambda dovrebbero essere limitate a compiti semplici, mentre per logica complessa sono preferibili le funzioni def.

Puoi seguire l'articolo sopra utilizzando Visual Studio Code sul nostro canale YouTube. Controlla anche il nostro canale YouTube.

YouTube Video