1.1 Elenco delle funzioni built-in popolari
Abbiamo già conosciuto molte funzioni built-in, ma mi piacerebbe parlare di alcune altre che potrebbero esserti utili nel prossimo futuro:
id()
hash()
dir()
Di seguito una breve descrizione:
Funzione id()
La funzione id()
restituisce un
identificatore unico dell'oggetto (numero). Questo identificatore
è un numero intero e rimane unico per l'oggetto durante la sua esistenza.
Solitamente, l'identificatore corrisponde all'indirizzo dell'oggetto
in memoria, anche se ciò non è garantito nella specifica di Python.
L'identificatore unico di un oggetto può essere utilizzato per comprendere meglio molte operazioni, ad esempio, per capire meglio dove gli oggetti si duplicano e dove abbiamo riferimenti allo stesso oggetto. Oggetti identici avranno identificatori diversi, ma i riferimenti allo stesso oggetto mostreranno lo stesso identificatore.
Può essere applicato durante il debug del programma e per capire come Python gestisce gli oggetti in memoria.
a = [1, 2, 3]
b = a
print(id(a)) # Stampa l'identificatore dell'oggetto 'a'
print(id(b)) # Stampa lo stesso identificatore, poiché 'b' si riferisce allo stesso oggetto
Funzione hash()
La funzione hash()
restituisce un valore hash (numero) per
l'oggetto specificato, se è hashable. Gli oggetti hashable in Python
devono essere immutabili e avere un valore hash costante durante il
loro ciclo di vita.
Esempi di tali oggetti includono numeri, stringhe e tuple (se tutti i loro elementi sono anche hashable). I valori hash vengono utilizzati nei dizionari e nei set per una rapida ricerca. Utilizzato per ottimizzare la ricerca e l'archiviazione dei dati, dove sono necessari controlli rapidi di uguaglianza e unicità.
print(hash("hello")) # Restituisce il valore hash della stringa "hello"
print(hash(42)) # Restituisce il valore hash del numero 42
print(hash((1, 2, 3))) # Restituisce il valore hash della tupla (1, 2, 3)
Importante!
I valori hash degli
oggetti immutabili rimangono costanti durante il loro ciclo di vita. Tuttavia,
gli oggetti mutabili, come liste e dizionari, non sono
hashable e non possono essere utilizzati come chiavi nei dizionari
o elementi nei set.
Funzione dir()
La funzione dir()
restituisce un elenco di attributi e metodi
di un oggetto. Se un oggetto non è specificato, dir()
restituisce
un elenco di nomi nello scope locale attuale.
Questa funzione è utile per esplorare la struttura degli oggetti e i loro attributi.
Utilizzata per ottenere un elenco di tutti gli attributi e metodi di un oggetto, ciò aiuta a comprendere meglio la sua struttura e le sue funzioni disponibili. Spesso usata per il debug e l'esplorazione degli oggetti, specialmente quando la documentazione è limitata o non disponibile.
class MyClass:
def __init__(self):
self.name = "Alice"
def greet(self):
print("Hello, " + self.name)
obj = MyClass()
print(dir(obj)) # Stampa l'elenco degli attributi e metodi dell'oggetto 'obj'
print(dir()) # Stampa l'elenco di nomi nello scope locale attuale
1.2 Lavorare con le collezioni
Ci sono altre funzioni utili per lavorare con le collezioni. Forse sono state menzionate in lezioni precedenti, ma ora voglio toccarle un po' più in dettaglio.
zip()
min()
max()
sum()
count()
Funzione zip()
La funzione zip()
combina più oggetti iterable
(ad esempio, liste, tuple, stringhe) e restituisce un iteratore di tuple.
Ogni tupla contiene elementi raccolti da posizioni con lo stesso
indice di tutti gli oggetti iterable.
Spesso usata per combinare dati da più oggetti iterable, consentendo di iterare facilmente su di essi contemporaneamente. E anche per creare dizionari da due liste: una per le chiavi e l'altra per i valori.
names = ["Alice", "Bob", "Charlie"]
ages = [25, 30, 35]
combined = zip(names, ages)
print(list(combined)) # Output: [('Alice', 25), ('Bob', 30), ('Charlie', 35)]
Funzione max()
La funzione max()
restituisce l'elemento più grande tra quelli passati
come oggetto iterable o tra più argomenti passati. Puoi
specificare anche una funzione chiave per definire la regola di confronto.
numbers = [1, 2, 3, 4, 5]
print(max(numbers)) # Output: 5
# Con la funzione chiave
words = ["apple", "banana", "cherry"]
print(max(words, key=len)) # Output: 'banana'
Funzione min()
La funzione min()
restituisce l'elemento più piccolo tra quelli passati
come oggetto iterable o tra più argomenti passati. Puoi
specificare anche una funzione chiave per definire la regola di confronto.
numbers = [1, 2, 3, 4, 5]
print(min(numbers)) # Output: 1
# Con la funzione chiave
words = ["apple", "banana", "cherry"]
print(min(words, key=len)) # Output: 'apple'
Funzione count()
La funzione count()
viene utilizzata per contare il numero di occorrenze
di un elemento in un oggetto iterable, come una lista o una stringa. Viene chiamata
su una lista, collezione o iteratore.
numbers = [1, 2, 2, 3, 4, 2, 5]
print(numbers.count(2)) # Output: 3
text = "hello world"
print(text.count("o")) # Output: 2
Funzione sum()
La funzione sum()
restituisce la somma di tutti gli elementi di un oggetto
iterable. Puoi opzionalmente specificare un valore iniziale che sarà
aggiunto alla somma.
numbers = [1, 2, 3, 4, 5]
print(sum(numbers)) # Output: 15
# Con valore iniziale
print(sum(numbers, 10)) # Output: 25
1.3 Esecuzione del codice
E ancora due funzioni che potrebbero esserti utili come principiante:
eval()
exec()
Hanno potenti capacità, ma richiedono un uso cauto a causa dei potenziali rischi per la sicurezza. Ecco informazioni dettagliate su ciascuna di queste funzioni:
Funzione eval()
La funzione eval(expression)
accetta una stringa e la esegue come un'espressione
Python. Restituisce il risultato dell'esecuzione di questa espressione.
Utilizzata per calcolare espressioni stringa come codice Python.
Esempi:
x = 10
result = eval("x + 5")
print(result) # Output: 15
Funzione exec()
La funzione exec()
accetta una stringa e la esegue come codice Python.
A differenza di eval()
, che esegue solo espressioni,
exec()
può eseguire qualsiasi istruzione Python, inclusi
definizioni di funzioni, cicli e importazione di moduli. Questa funzione non restituisce
valore.
Utilizzata per eseguire script dinamici e definire nuove funzioni o classi durante l'esecuzione del programma.
code = """
def greet(name):
print(f"Hello, {name}!")
greet("Alice")
"""
exec(code)
# Output: Hello, Alice!
Importante!
Come eval()
, anche exec()
può essere pericoloso
se usato con dati di input non attendibili. Fai attenzione
ed evita di utilizzare exec()
per eseguire codice in production.
GO TO FULL VERSION