Questo articolo aiuterà il lettore a proseguire dal precedente blog sulle funzioni Python insieme ad alcune applicazioni di base nel mondo reale. Utilizzeremo Visual Studio Code come nostro editor di codice. Se non hai installato Visual Studio Code, le istruzioni sono fornite nel primo blog.

Funzioni avanzate in Python – indice:

  1. Passare funzioni ad altre funzioni
  2. Utilizzare funzioni all’interno di una funzione
  3. *Args in Python
  4. Operatore “*” in Python
  5. **kwargs in Python

Passare funzioni ad altre funzioni

Come discusso nel blog precedente, le funzioni in Python sono trattate come oggetti. Quindi, come gli oggetti in Python, le funzioni possono anche essere passate come argomento a un’altra funzione.

Per esempio:

def mul(x, y):
    return x*y
 
 
def add(mul, y):
    return mul+y
 
 
x = add(mul(9, 10), 10)
print(x)

Nell’istruzione di codice sopra, si può vedere che la funzione mul è passata come argomento alla funzione add e viene memorizzata nella variabile x che viene poi stampata per verificare la risposta.

100

Utilizzare funzioni all’interno di una funzione

In Python, possiamo definire una funzione all’interno di un’altra funzione. Queste funzioni sono chiamate funzioni annidate. Ma in questo caso d’uso, la funzione interna o funzione annidata non può essere chiamata separatamente. Entrambi gli esempi sono illustrati nel seguente blocco di codice.

Scriviamo la nostra prima funzione.

def mul(x, y):
 
    m = x*y
 
    def square(m):
        return m*m
 
    return square(m)
 
 
x = mul(9, 10)
 
print(x)
Output:
8100

Nel blocco di codice sopra, la funzione esterna è “mul” che restituisce la funzione square che prende un argomento “m” che è il prodotto di due argomenti dati alla funzione “mul”. L’esecuzione del codice inizia prima chiamando la funzione “mul”, poi il prodotto di “x” e “y” viene memorizzato nella variabile “m”. Poiché questa funzione restituisce la funzione square, viene chiamata la funzione “square” e il prodotto finale, che è il quadrato di “m”, viene restituito.

Impariamo alcune cose importanti in Python, che renderanno il tuo viaggio di codifica con Python molto migliore.

*Args in Python

Questi sono gli argomenti che utilizziamo come parametri di funzione. Scriviamo una funzione usuale utilizzando ciò che abbiamo imparato fino ad ora. Scriveremo una funzione che può darci l’area massima di un rettangolo dati 2 aree di rettangolo come parametri della funzione.

def maxarea(a, b):
    if a > b:
        return f'il rettangolo a ha l'area maggiore che è {a}'
    else:
        return f'il rettangolo a ha l'area maggiore che è {b}'
 
 
x = maxarea(100, 60)
print(x)
 
Output:
il rettangolo a ha l'area maggiore che è 100
[code lang="js"]

Questa funzione è buona per 2 parametri o argomenti, ma cosa succede se dobbiamo confrontare più di 2 aree. Un approccio sarebbe passare un elenco di aree nella funzione.

def maxarea(lis):
 
    max = 0
    for i in lis:
        if i > max:
            max = i
 
    return f"il rettangolo che ha l'area maggiore è {max}"
 
 
x = maxarea([100, 60, 50])
print(x)
Output:
il rettangolo che ha l'area maggiore è 100

Questo approccio è buono, ma dovremmo conoscere in anticipo il numero di parametri o argomenti da fornire. Nell’esecuzione del codice in tempo reale, questo sarebbe un problema. Pertanto, per semplificare la vita del programmatore, Python utilizza *args e **kwargs.

Operatore “*” in Python

Questo operatore è un operatore di disimballaggio che viene solitamente utilizzato per passare un numero non specificato di parametri o argomenti.

Disimballare argomenti in una tupla utilizzando l’operatore *

Come abbiamo visto, l’operatore “*” è utilizzato per disimballare valori. L’esempio è illustrato di seguito.


x = [1, 2, 3, 4]
y = [5, 6, 7, 8]
 
z = *x, *y
 
print(type(z))
print(z)
Output:
<class 'tuple'>
(1, 2, 3, 4, 5, 6, 7, 8)

Come possiamo vedere, l’operatore di disimballaggio ha disimballato l’elenco x e l’elenco y in una tupla che è z. Possiamo anche vedere che il risultato è una tupla.

Scriviamo la stessa funzione utilizzando *Args.

def maxarea(*lis):
 
    max = 0
    for i in lis:
        if i > max:
            max = i
 
    return f"il rettangolo che ha l'area maggiore è {max}"
 
 
x = maxarea(100, 60, 50, 200)
y = maxarea(100, 60, 50, 200, 9000)
z = maxarea(100, 60, 50, 20, 90)
print(x)
print(y)
print(z)
Output:
il rettangolo che ha l'area maggiore è 200
il rettangolo che ha l'area maggiore è 9000
il rettangolo che ha l'area maggiore è 100

In questo blocco di codice possiamo vedere che ora gli argomenti sono dinamici, possiamo aggiungere qualsiasi numero di argomenti che verranno disimballati nella funzione maxarea per darci il risultato desiderato. Inoltre, possiamo confrontare qualsiasi numero di aree in questo contesto.

**kwargs in Python

I kwargs sono simili agli args ma accettano argomenti posizionali. Utilizza l’operatore ** che ha alcune caratteristiche come disimballare più argomenti posizionali di qualsiasi lunghezza, può anche disimballare dizionari, può anche essere utilizzato per combinare due dizionari.

Unire dizionari

a = {"h": 1, "n": 2}
b = {"m": 5, "l": 10}
 
c = {**a, **b}
 
print(type(c))
print(c)
 

Possiamo vedere dal codice sopra che abbiamo 2 dizionari a e b che sono stati uniti utilizzando l'operatore ** per dare un altro dizionario.
Output:
 
<class 'dict'>
{'h': 1, 'n': 2, 'm': 5, 'l': 10}

Quando utilizziamo l’operatore * invece dell’operatore **, il codice per questo caso è illustrato di seguito.

a = {"h": 1, "n": 2}
b = {"m": 5, "l": 10}
 
c = {*a, *b}
 
print(type(c))
print(c)
Output:
<class 'set'>
{'n', 'l', 'm', 'h'}

Quindi, quando l’operatore * viene utilizzato su due dizionari per unirli, il risultato sarà un insieme con solo le chiavi del dizionario.

La funzione maxarea utilizzando **kwargs è illustrata nel blocco di codice sottostante.

def maxarea(**lis):
 
    max = 0
    for i in lis.values():
        if i > max:
            max = i
 
    return f"il rettangolo che ha l'area maggiore è {max}"
 
 
x = maxarea(a=1, b=2, c=3)
y = maxarea(a=1, b=2)
z = maxarea(a=1, b=2, c=3, d=9)
print(x)
print(y)
print(z)
Output:
il rettangolo che ha l'area maggiore è 3
il rettangolo che ha l'area maggiore è 2
il rettangolo che ha l'area maggiore è 9

In questo blog sulle funzioni avanzate in Python, abbiamo trattato argomenti come passare funzioni ad altre funzioni, utilizzare funzioni all’interno di una funzione, *Args in Python, operatore “*” in Python, **kwargs in Python e altro. Gli argomenti successivi che includono le classi saranno trattati nel prossimo post del blog. I compiti riguardanti le funzioni avanzate in Python sono forniti di seguito.

advanced_functions_in_Python

Agnieszka Markowska-Szmaj

View all posts →