Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
PYTHON
- È un linguaggio interpretato, interattivo e orientato agli oggetti
⇓ il codice sorgente viene interpretato direttamente da Python lavora nella modalità read-eval-print-loop supporta diversi tipi di paradigmini
- Python si basa sulle espressioni, ovvero dei frammenti di codice che producono un valore (risultato) e opzionalmente dei side effects
- non producono un valore, ma un'azione
Le espressioni sono recursive, ovvero possono essere combinate insieme per creare espressioni più complesse
- Espressione Atomica
- è un'espressione basilare che non può essere scomposta
- Espressione Composta
- è l'espressione che si può scomporre in più espressioni
Possono essere combinate tramite operatori (es. not) che prendono un solo argomento operatori binari, aritmetici, relazionali, di appartenenza, di identità e bit a bit prendono due argomenti.
- Python ha un meccanismo di binding (variabile impropriamente chiamate) e ad ogni nome viene associato un valore e quel nome può essere usato nel codice per richiamare sottintamente quel valore
Non esiste la dichiarazione di una variabile o la variabile inizia ad esistere nel momento in cui si assegna un valore
Non c'è bisogno di associare un tipo alla variabile perché in Python i tipi fanno riferimento al valore
- L'insieme delle associazioni nome-valore si chiamano frame stack ed è l'insieme delle variabili definite nel sistema
Per il problema dell'ambiente lessicografico eliminazione non è strettamente necessario cancellare un nome perché Python gestisce la memoria quindi quando la variabile esce da un visetto viene eliminata direttamente; eliminare elementi da un insieme.
N.B.: nel caso di espressioni semplici si possono usare gli operatori di incremento (modo più veloce di scrivere le codice)
count = count + 1count += 1- In Python esistono anche le lambdas, hanno una sintassi standard: nome della funzione, argomenti, valorizzazione della funzione. È anche le funzioni sono dei nomi
- I tipi di default presenti in Python sono: int, float, bool, stringhe, bytes e complex
- non ci sono diversi tipi come long, float corrisponde al double nel C (max precisione si ha a ... )
INT
- non hanno limiti di dimensioni se non quelli derivanti dalla memoria del computer
BOOL
- hanno solo 2 valori: "True" e "False" → è il tipo che viene restituito dagli operatori relazionali ma anche da delle funzioni, delle proposte che vengono usate per controllare qualcosa
- es. "isistance" prende valore e tipo e controlla se quel valore è di quel tipo
FLOAT
- vengono rappresentati tramite le floating point → mantissa + esponente
- la differenza tra e.g. esponenti è troppo alta, la mantissa non conta niente
STRING
- sono sequenze di caratteri, delimitati da apice singoli o doppi
- note tra apici singoli ('i'), note tra apici doppi ("i... i.ii")
- le stringhe possono essere sommate ma in questo caso i + e + sono per la concatenazione
- "len" si usa per chiedere la lunghezza della stringa
- l'operatore di indexing permette di accedere ai singoli caratteri
- la sintassi per domandare consente che in stringhe → nome variabile nome operazione
BYTES
- stesso sintassi delle stringhe con la b prefissa
Gli operatori supportati sono:
- + - *
- / // % ... **
- somma moltiplicazione prodotto ... potenza
- / -> divisione (3/2 = 1.5)
- // -> divisione intera (3//2) = 1
- % -> modulo (3/2 = 1) dice il resto della divisione
- Quando si fanno operazioni tra due numeri esistono delle regole di conversione
- se almeno uno dei due è complesso anche la divisione diventa complessa
- se uno è complesso, la conversione di entità dei due è float, viene fatta con conversione automatica
- se gli operatori sufficienti non ce ci bisogno di conversione
- Gli operatori di indexing e di slicing si applicano alle sequenze in generale
- indexing si fa tramite gli indici negativi oppure positivi (e.g. indici positivi selezionano, elemento partendo dal primo della sequenza; gli indici negativi partono dalla fine della sequenza & decrementando)
- slicing consente di estrarre o subissuenced della stringa, precisa [a:b:c]
- può essere fatto con uno solo e viene indicato anche il passo che si devo fare [a:b:c]
Moduli e Package
Un ____________________ non è formato da un unico file, ma è formato da una collezione di file che presentano meccanismi per il riuso.
- Dividere ci funzioni in più file ha due vantaggi:
- persone diverse possono lavorare su file diversi;
- non si ha la stessa funzione che sta in più parti; si ha un ____________ __ _____________
- si ha un namespace per ogni file
- Si creano più file (.py) in cui ogni file rappresenta un ____________.
______________ uno il namespace
- ________________ permette di usare un modulo all'interno di un altro.
- esistente, che permettono importare nome del modulo (es: import greetings)
- esistono due sintassi:
- scrivendo nome del modulo, funzione; si dice di andare a prendere la funzione del modulo
- (a,b = prendilo da a), usando ______________ da a a)
- importazione con alias, a scopo per rinominare quello che si sta importando
- import nome modulo as nuovo nome (es: import greetings as greet)
- si deve disegnare un modulo come _________ avvero come punto di inizo del programma, e per verificare se un modulo è usato come entry point si usa la variabile speciale "__name__"
- es.: if __name__ == "__main__"
- print("e` l'entry point")
N.B.
Si deve stare attenti a dare ai moduli monomi diversi da quelli della libreria standard perché i moduli creati da noi hanno la precedenza.
Non c'è una regola comune per dividere le codice in mod→ ma in generale funzioni e strutture dati che vengano usati insieme devono stare nello stesso mod→.
Cle' in formato alternato dei moduli e si crea una directory con lo stesso nome che al suo interno contiene un file __init__.py
- my → project
- l`name
- my → project
- l`name
- m`init`→ py
formato standard formato alternative
- la directory può rinare an chi moduli quindi si renano dei _____________ avere moduli che possano contenere altri
N.B: tutto quello che è nella classe base viene importato nella classe derivata
- se una cosa è privata non si può vedere al di fuori della classe attuale, però immediante che un attributo non fosse visibile dall'esterno, ma visibile alle classi derivate
- questo si fa tramite la ———————————————————— nel diagramma UML si mette il # al posto del - e in python si mette un solo underscore
- per specializzare una classe si può usare il meccanismo della sottoscrittura che consente di migliorare o modificare il comportamento esistente. solo le classi e già caratteristiche visibili in questo modo. il metodo è già usato dalla classe il metodo prende la precedenza si usa una versione diversa del metodo generico, si sente parte polimorfismo e lo si usa quando si vuole indentificare il costruttore __init__
per estendere i funzionamenti della classe base si usa la funzione ———— che restituisce una versione di self in cui i metodi vengono risolti partendo dalla classe immediatamente precedente nella gerarchia.
Le classi astratte sono una via di mezzo tra interfaccie e classi, è una classi da cui si possono ereditare ma che non può essere istanziata. è una classe incompleta che consente di risolvere il problema per cui non si vorrebbe ereditare codice senza avere la totalità del comportamento della classe base.
I metodi astratti sono metodi in cui si specifica il nome, gli argomenti e i tipi di ritorno ma non l’implementazione.
N.B.: nel diagramma UML per la classe astratta il metodi astratti sono scritti in corsivo, ————, mentre nel codice per la classe astratta si indica con ———— mentre il metodo astratto si annota con la sintassi AbstractMethod
Interfaccia ———— Classe astratta ———— Classe concreta
- Definisce un interfaccia
- pubblica, ma non rappresenta qualcosa di completamente astratto e dà una idea di cosa faccia
- Non si può istanziare
- Definisce un interfaccia pubblica, ma richiede un’implementazione a livello parzialmente (come se fosse una classe)
- Non si può istanziare
- Consente l'ereditarietà
- Si può istanziare e si usa quando si ha un comportamento completamente definito
- Le classi derivate ereditano dalla classe base e da esistendo
Attributi e metodi statici
- Esenche di casi in cui si vorrebbe poter trattare tra classe stessa come oggetto perchè si hanno degli attributi e dei metodi che non sono propri del singolo oggetto ma sono propri della collettività di oggetti
- per fare questo si usano ————————————————— ora metodi che vengono richiamati e non sono sul “oggetto” e non prendono come argomenti self ma cls che è la classe
La UML si indica tramite la __ sottoscrittora.presenta una idea completa più app per descriviamo e il comportamento