Python Core
Dalle fondamenta a Pydantic e asyncio
L’evoluzione definitiva di Python Pro: il bestseller italiano rinasce da zero per l’era dell’Intelligenza Artificiale.
“Python Pro” è il corso di Python più venduto in Italia su Udemy. Oggi evolve in “Python Core“: non una semplice revisione, ma una completa riscrittura, disponibile solo su Alessandro Bemporad Academy. Una solida architettura del linguaggio che integra nativamente asyncio e Pydantic per fornirti gli strumenti indispensabili richiesti dai moderni framework e pipeline AI. Il nuovo standard, ricostruito dalle fondamenta.
La struttura del corso segue il modello del linguaggio definito dal Python Language Reference 3.14 e dal Python Data Model: oggetti, identità, tipo e valore; nomi e binding; modello di esecuzione; espressioni e statement; strutture dati; funzioni, moduli, classi, annotazioni ed eccezioni. E una trattazione approfondita di Asyncio e di Pydantic.
Al termine di ogni sezione, una missione operativa permette di verificare con precisione ciò che hai appreso.
Il Caso di Studio: Il Modello “Andromeda”
Per evitare astrazioni puramente teoriche e applicare i concetti su un dominio ad alta complessità, il corso adotta un’ambientazione d’eccezione come unico grande caso di studio pratico: la gestione logica e infrastrutturale della nave da esplorazione Andromeda.
L’architettura dei sistemi di bordo dell’Andromeda funge da perfetta metafora di un’organizzazione del mondo reale: un ecosistema complesso in cui componenti come sensori, procedure di analisi di reperti spaziali e sistemi intelligenti devono scambiarsi informazioni e cooperare in modo deterministico e privo di ambiguità. Attraverso questo modello, si affrontano scenari di analisi concreti e strutturati.
Guarda il video di presentazione
Programma del corso
PARTE I – IL LINGUAGGIO PYTHON
Sezione 0: Benvenuto a Bordo
- 0.1 Benvenuto a bordo
- 0.2 Programma e codice sorgente
- 0.3 L’interprete Python
- 0.4 Installare Python
- 0.5 Installare VS Code
- 0.6 Il terminale
- 0.7 uv package & project manager
- 0.8 Creare un progetto con uv
- 0.9 Anatomia del progetto
- 0.10 Il REPL
- 0.11 Eseguire un file Python
- 0.12 Il primo output
- 0.13 I Commenti
- 0.14 Righe fisiche e righe logiche
- Missione 0 — Postazione operativa
Sezione 1: Oggetti, identità e valore
- 1.1 Tutto è un oggetto
- 1.2 Funzioni e operatori
- 1.3 L’identità di un oggetto
- 1.4 Il tipo di un oggetto
- 1.5 Il valore di un oggetto
- 1.6 Oggetti mutabili e immutabili
- 1.7 Identità e uguaglian
za - 1.8
None— l’oggetto dell’assenza - Missione 1 — Ispezione degli oggetti
Sezione 2 — Nomi e binding
- 2.1 Il nome — un riferimento a un oggetto
- 2.2 Formare un nome valido
- 2.3 L’assegnazione come binding
- 2.4 Rebinding: riassegnare un nome
- 2.5 Aliasing
- 2.6
del— sciogliere un binding - Missione 2 — Nomi e riferimenti
Sezione 3: Literal e tipi scalari
- 3.1 Il literal
- 3.2 Gli interi —
int - 3.3 I numeri in virgola mobile —
float - 3.4 I booleani —
bool - 3.5 Le stringhe —
str - 3.6 I byte —
bytes - 3.7 Conversioni esplicite tra tipi
- 3.8 Tipi scalari e immutabilità
- Missione 3 — Telemetria scalare
Sezione 4: Espressioni
- 4.1 L’espressione
- 4.2 Attributo
- 4.3 Gli operatori aritmetici
- 4.4 La precedenza degli operatori
- 4.5 Gli operatori di confronto
- 4.6 Gli operatori booleani
- 4.7 La valutazione short-circuit
- 4.8 Truthiness
- 4.9 Le f-string — incorporare espressioni nel testo
- Missione 4 — Valutazione
Sezione 5: Strutture dati
- 5.1 La lista —
list - 5.2 L’indicizzazione
- 5.3 Lo slicing
- 5.4 Il metodo
- 5.5 Mutare una lista
- 5.6 Aliasing e oggetti mutabili
- 5.7 La tupla
- 5.8 L’unpacking di una sequenza
- 5.9
*nell’unpacking - 5.10 Il dizionario
- 5.11 Accedere a un dizionario
- 5.12 Mutare un dizionario
- 5.13
**— unpacking di dizionari - 5.14 Gli operatori di appartenenza
- 5.15 L’insieme —
set - Missione 5 — Registro strutturato
SEZIONE 6 — IL PROTOCOLLO DI ITERAZIONE
- 6.1 Attraversare una collezione — l’iterabile e l’iteratore, due ruoli distinti
- 6.2
iter— ottenere un iteratore da un iterabile - 6.3
next— chiedere l’elemento successivo - 6.4
StopIteration— il segnale di fine sequenza - 6.5 L’iteratore si consuma una volta sola — ed è a sua volta un iterabile
- 6.6 La valutazione lazy — produrre soltanto ciò che viene richiesto
- Missione 6 — Attraversamento manuale
SEZIONE 7 – STATEMENT E CONTROLLO DEL FLUSSO
- 7.1 Programmazione strutturata
- 7.2 Lo statement
- 7.3 Lo statement composto
- 7.4
if/elif/else - 7.5 L’espressione condizionale
- 7.6
while - 7.7
for - 7.8
range - 7.9
breakecontinue - 7.10 L’assegnazione aumentata
- 7.11 L’espressione di assegnazione
- 7.12
match— la selezione strutturale - MISSIONE 7 – Diagnostica ambientale
SEZIONE 8 – FUNZIONI
- 8.1 Le tre dimensioni di una funzione
- 8.2
def— definire una funzione - 8.3 Parametri e argomenti
- 8.4 Lo statement
return - 8.5 Argomenti posizionali e per parola chiave
- 8.6 Valori di default
- 8.7
*argse**kwargs - 8.8 Unpacking degli argomenti nelle chiamate
- 8.9 La funzione è un oggetto
- 8.10
lambda - MISSIONE 8 – Analisi della telemetria
SEZIONE 9 – IL MODELLO DI ESECUZIONE: BINDING, SCOPE E CLOSURE
- 9.1 Code block e frame di esecuzione
- 9.2 Scope locale e scope globale
- 9.3 La funzione annidata e lo scope enclosing
- 9.4 La regola LEGB
- 9.5
globalenonlocal - 9.6 La closure
- 9.7 Le comprehension
- 9.8 La comprehension ha un proprio scope
- MISSIONE 9 – Sorveglianza del Core
SEZIONE 10 – GENERATORI
- 10.1 La funzione generatrice
- 10.2 L’oggetto generatore
- 10.3 Sospensione e ripresa
- 10.4 La generator expression
- 10.5
yield from - MISSIONE 10 – Flusso telemetrico a richiesta
SEZIONE 11 – IL SISTEMA DI IMPORT
- 11.1 Il modulo
- 11.2 Importare un modulo
- 11.3 Importare un nome dal modulo
- 11.4 Il package
- 11.5
__name__e__main__ - MISSIONE 11 – Il sottosistema dei materiali
SEZIONE 12: CLASSI E ISTANZE
- 12.1 La classe
- 12.2 L’istanza
- 12.3 I data attribute di istanza
- 12.4 Gli attributi di classe
- 12.5 I metodi di istanza
- 12.6 Il bound method
- 12.7 Il metodo
__init__ - 12.8 L’ereditarietà
- 12.9 Override e
super() - MISSIONE 12 – La consegna
SEZIONE 13 – I METODI SPECIALI
- 13.1 Il metodo speciale
- 13.2
__repr__e__str__ - 13.3
__eq__ - 13.4
__hash__ - 13.5
__len__e__bool__ - 13.6
__getitem__ - 13.7
__contains__ - 13.8
__iter__e__next__ - MISSIONE 13 – Il kit di riparazione
SEZIONI 14 – ECCEZIONI
- 14.1 L’eccezione
- 14.2
raise - 14.3
try/except - 14.4 Cattura per classi derivate
- 14.5
finally - 14.6 Definire una propria eccezione
- 14.7 Propagare e concatenare
- 14.8 StopIteration, rivisto
- MISSIONE 14 – Conservare la causa
SEZIONE 15 – CONTEXT MANAGER, DECORATORI E CALLABLE OBJECT
- 15.1 Il rilascio della risorsa
- 15.2 Lo statement
with - 15.3 I metodi speciali
__enter__e__exit__ - 15.4 Il ritorno di
__exit__ - 15.5 Context manager multipli
- 15.6 Il decoratore
- 15.7 Il wrapper
- 15.8 Gli attributi speciali
__name__e__doc__ - 15.9 Il metodo speciale
__call__ - MISSIONE – Il lotto temporaneo
SEZIONE 16 – LE ANNOTAZIONI
- 16.1 L’annotazione
- 16.2 La firma annotata
- 16.3 I tipi generici
- 16.4 L’unione
- 16.5 Lo statement
type - 16.6 La valutazione differita
- 16.7
__annotations__ - MISSIONE – Il contratto annotato
PARTE II – PYDANTIC V2
SEZIONE 17 – Modelli e validazione con Pydantic v2
- 17.1 Il confine dei dati
- 17.2
BaseModel - 17.3 La validazione del modello
- 17.4 Conversione e modalità strict
- 17.5
ValidationError - 17.6 Campi obbligatori e valori di default
- 17.7
Field - 17.8 Modelli annidati
- 17.9 Unioni discriminate
- 17.10 Validare un campo con
AfterValidator - 17.11 Il decoratore
model_validator - 17.12
model_validateemodel_dump - 17.13 JSON e JSON Schema
- 17.14 La classe
type_adapter - MISSIONE – Il piano di coltivazione
PARTE III – ASYNCIO
SEZIONE 18 – IL MODELLO ASINCRONO
- 18.1 asyncio e ANSOC
- 18.2 Processo e thread
- 18.3 Concorrenza e parallelismo
- 18.4 Scheduler e multitasking
- 18.5 CPU-bound e I/O bound
- 18.6 Il multitasking cooperativo
- 18.7 I/O bloccante e non bloccante
- 18.8 Quando una risorsa diventa pronta
- 18.9 L’event loop
- 18.10 La coroutine
- 18.11
async defe l’oggetto coroutine - 18.12 Awaitable e
__await__() - 18.13 La parola chiave
await - 18.14
asyncio.run() - MISSIONE: Una rilevazione da completare
SEZIONE 19: TASK E CONCORRENZA STRUTTURATA
- 19.1 Dalla coroutine al task
- 19.2 Concorrenza strutturata e
TaskGroup - 19.3
ExceptionGroupedexcept* - 19.4 La cancellazione cooperativa
- 19.5
CancelledErrorefinally - 19.6
asyncio.timeout - MISSIONE – Ping alla sonda
SEZIONE 20: PROTOCOLLI E STRUMENTI ASINCRONI
- 20.1 Lo statement
async with - 20.2 Lo statement
async for - 20.3 Il codice bloccante e
asyncio.to_thread - 20.4 Il ciclo di vita di un componente asincrono
- 20.5 Errori tipici nel codice asincrono
- MISSIONE: Trova il problema
CONCLUSIONE
- Hai completato Python Core