introduzione a python ed installazione di...
TRANSCRIPT
Introduzione a Pythoned installazione di Jupyter
Marco D. Santambrogio – [email protected] Del Sozzo – [email protected] Di Tucci – [email protected] Natale – [email protected] Rabozzi – [email protected] Scolari – [email protected]. aggiornata al 7 Novembre 2016
Agenda
• Introduzione a Python
• Tipi e costrutti
• Liste, dizionari e insiemi
• Funzioni
• Classi
• File
2
Installazione
• Anaconda fornisce:• Python Virtual Machine• IDE per la scrittura di codice Python (Spyder, Jupyter)
• Scaricare Anaconda dal seguente link:• https://www.continuum.io/downloads
• Scegliere solo Python 3.5
3
Cosa è Python?
• Python è un linguaggio di programmazione
• Di alto livello• Interpretato• Debolmente tipizzato• Orientato agli oggetti
• E’ comodo per sviluppare rapidamente applicazioni e script
• Documentazione: https://www.python.org/doc/
4
C vs Python
5
C- Basso livello- Compilato- Fortemente tipizzato- Non a oggetti
Python- Alto livello- Interpretato- Debolmente tipizzato- A oggetti
C vs Python
6
C- Basso livello- Compilato- Fortemente tipizzato- Non a oggetti
Python- Alto livello- Interpretato- Debolmente tipizzato- A oggetti
Allocazione esplicita della memoria (gestione dei puntatori)
Allocazione implicita della memoria
C vs Python
7
C- Basso livello- Compilato- Fortemente tipizzato- Non a oggetti
Python- Alto livello- Interpretato- Debolmente tipizzato- A oggetti
file.c
gcc
codicemacchina
file.py
interpretePython
codiceinterpretato
C vs Python
8
C- Basso livello- Compilato- Fortemente tipizzato- Non a oggetti
Python- Alto livello- Interpretato- Debolmente tipizzato- A oggetti
int a;a = 5; //Correttoa = “stringa”; //Errore!!
a = 5 #Correttoa = “stringa” #Correttoa = 1.3 #Corretto
Il tipo della variabile va dichiarato esplicitamente
Nessuna dichiarazione esplicita di tipo
C vs Python
9
C- Basso livello- Compilato- Fortemente tipizzato- Non a oggetti
Python- Alto livello- Interpretato- Debolmente tipizzato- A oggetti
void sort(int * array){...}...int vet[] = {1, 6, 4, 8, 9};sort(vet);
vet = [1, 6, 4, 8, 9]vet.sort()
sort èunafunzionedell’oggetto vetedagiscesudiesso
Introduzione alla sintassi Python
• Le variabili non vanno dichiarate prima di essere usate
• Non è necessario usare i punti e virgola alla fine di ogni istruzione
• I costrutti (if-else, for, funzioni) usano i duepunti al posto delle graffe di apertura e devono essere indentati con spazi o tabulazione (evitare di usarli entrambi)
• I commenti si inseriscono con # (singola linea) o ‘‘‘commento’’’ (multi linea/docstring)
10
Jupyter
Una volta installato Anaconda, aprite Jupyter e create un nuovo notebook Python
11
Hello World
Proviamo a scrivere un Hello World in Python…
… e ad eseguirlo sull’interprete
12
Input / Output
• Per leggere da linea di comando, usate la funzione input()
• Per stampare valori a schermo, usate la funzione print()
• Il risultato è:
13
Input / Output: stampa di stringhe
• Se volete stampare una stringa insieme ad un valore, è necessario convertire il valore in una stringa e concatenarli
• La concatenazione è fatta usando l’operatore +• I valori letti con input() sono stringhe!
• Per convertire un numero in una stringa, usate la funzione str(obj)• Per passare da stringa ad intero, int(obj)…se è possibile!
14
Esempio di tipizzazione debole
15
• Vediamo cosa succede quando prima assegniamo a due variabili i caratteri rappresentanti due numeri e li sommiamo
• Assegniamo ora alle stesse variabili i due interi precedenti e sommiamoli ancora
Inclusione librerie
• Come in C, è possibile importare librerie (moduli) ed usare le funzioni definite all’interno
• Esistono differenti modi di importare e usare i moduli:
16
import os#importalospaziodeinomidelmoduloos
import osas O#importalospaziodeinomidelmodulooscomeO
from osimport *#importatuttodallospaziodeinomidelmoduloos
from osimport curdiras CCfrom osimport listdiras LS#importaunelementospecificoconunalias
os.curdiros.listdir(“Desktop”)
O.curdirO.listdir(“Desktop”)
curdirlistdir(“Desktop”)
CCLS(“Desktop”)
Funzioni utili
• len(obj) riporta la lunghezza dell’oggetto obj (stringa, lista, etc.) passata come argomento
• dir(obj) riporta tutti i dati e le funzioni contenute in un modulo
• help(obj) mostra la documentazione relativa ad un oggetto obj
17
Tipi e costrutti in Python
Tipi base• I tipi (classi) base di python sono:
19
tipi esempioint 1,2,3float 1.5,2.2,4.3bool True,Falsestr “abc”,“stringa”list [1,2,3,4],[”abc”,“def”,“ghi”]dict {chiave1:valore1,chiave2:valore2}tuple (1,2,3,4),(“abc”,“def”,“ghi”)set {1,2,3,4},{“abc”,“def”,“ghi”}
Tipi base
• Per sapere il tipo di una variabile, usate la funzione type(obj)
• Per sapere I metodi e attributi di untipo, usate la funzione dir sull’oggetto,or la funzione help sul tipo
20
Operatori logici
21
Operazioni C Python
Andlogico && and
Orlogico || or
Notlogico ! not
Uguaglianza ==,!= ==,!=,is,isnot
Confronto <,>,<=,>= <,>,<=,>=
Operatori logici - uguaglianza
22
==, != verifica se due oggetti hanno lo stesso valore
is, is not verifica se due oggetti sono lo stesso oggetto
Operazioni C Python
Andlogico && and
Orlogico || or
Notlogico ! not
Uguaglianza ==,!= ==,!=,is,isnot
Confronto <,>,<=,>= <,>,<=,>=
If - else
• La struttura base di un if-else è:
• Se è necessario usare più if-else in cascata, usate elif:
23
elif
Ciclo while
• La sintassi del ciclo while in Python è identica a quella del C:
• Inoltre, a differenza del C, è possibile inserire un ramo elsealla fine del while
• Il ramo else verrà eseguito quando la condizione del while diventa falsa
24
Ciclo for
• Il ciclo for di Python è abbastanza diverso dal C
• Una variabile itera su una serie di valori in una sequenza
• La sequenza può essere:• Una lista, dizionario, tupla, insieme• Una stringa• Un iteratore
• Anche alla fine del for si può inserire il ramo else
25
Iteratori• Gli iteratori sono oggetti che restituiscono una sequenza di oggetti uno alla
volta tramite il metodo next()
• L’iteratore che si usa solitamente nel ciclo for è range, la cui sintassi è:
• Solo il parametro fine è obbligatorio, mentre inizio e passo opzionali:• L’iterazione va fino a fine escluso• In mancanza di inizio, l’interazione parte da 0• In mancanza di passo, il passo di default è 1• Il passo può essere inserito solo se è presente anche l’inizio
• Se inizio è maggiore (o uguale) a fine, il for non verrà eseguito (a meno di un passo negativo)
26
Iteratori: esempi• La variabile i va da 0 a 10 (escluso) con passo 1
• La variabile i va da 20 a 30 (escluso) con passo 1
• La variabile i va da 10 a 60 (escluso) con passo 5
• La variabili i va da 20 a 10 (escluso) con passo -1
27
Break e continue
• Il comando break serve per uscire dall’esecuzione di un ciclo(in questo caso, NON viene eseguito l’eventuale else del ciclo)
• Il comando continue serve per saltare all’iterazione successiva del ciclo
28
Liste, dizionari e insiemi in Python
Liste• Le liste sono oggetti di dimensioni variabili che contengono altri
oggetti in un ordine preciso dato dall’inserimento
• Le liste possono contenere diversi tipi
• Differenza tra liste Python e array in C (tipi diversi e lunghezza dinamica)
30
C
- Gli array non possono contenereelementi di tipi diversi
- Gli array non possono cambiare lapropria dimensione
Python
- Le liste possono contenereelementi di tipi diversi
- Una lista può cambiare la propriadimensione
Creazione di una lista
31
• Una lista può essere creata in due modi:• Operatore [ ]• Funzione list() … quindi evitate di chiamare una lista list!
• Esempi di creazione con l’operatore [ ]• [ ] crea una lista vuota• [val1, val2, val3] crea una lista
a partire dai valori inseriti
• Esempi di creazione con la funzione list()• list() crea una lista vuota• list(iteratore) crea una lista
a partire dall’iteratore
Lettura, inserimento e rimozione di elementi
32
• Letturalista[indice] dove indice è la posizione dell’elemento a cui voler
accedere
• Inserimento• append(val) inserisce l’elemento val in coda alla lista• insert(indice, val) inserisce un valore in posizione indice
Lettura, inserimento e rimozione di elementi
33
• Rimozione• pop(indice) rimuove l’elemento alla posizione indice• remove(val) rimuove la prima occorenza del valore val
Scorrere gli elementi di una lista
34
• Per scorrere una lista solitamente si usa un ciclo for come in C
• E’ anche possibile iterare direttamente sulla lista
• In questo caso i assume il valore di ognuno degli elementi presenti all’interno della lista
Altre operazioni sulle liste
35
• E’ possibile usare indici negativi sulle liste:-1 restituisce l’ultimo elemento, -2 il penultimo, …
• La funzione reverse() inverte una lista stessa
Altre operazioni sulle liste
36
• E’ possibile concatenare due liste con l’operatore +
• Si può creare una lista di N elementi uguali moltiplicando una lista contenente gli elementi desiderati per N
Liste di liste
37
• Una lista può essere definita all’interno di un’altra lista
• Per accedere ad un certo elemento di una delle liste, si accede prima alla lista di interesse e poi all’elemento corrispondente
Definire matrici tramite liste
38
• Le matrici in Python possono essere definite come lista di liste
• La lista più esterna contiene le righe della matrice, quelle più interne gli elementi delle colonne relative a quella riga
• Esempi di creazione di matrice
• Si possono creare “matrici” con righe di dimensioni diverse
List comprehension
39
• List comprehension è un metodo che permette di costruire liste in maniera veloce e compressa
• Si crea una lista a partire da una descrizione inserita tra [ ]
• x indica il valore che voglio andare ad inserire nella lista• Il valore inserito nella lista può essere anche il risultato di operazioni
List comprehension
40
• La lista può essere costruita usando anche condizioni (if-else)
• E’ possibile costruire una matrice con list comprehension
Operatore ternario
• Questa list comprehension si basa su un operatore ternario, ossia un operatore che restituisce un certo valore basandosi sul fatto che una condizione sia vera o falsa
• Se la condition è vera, l’output dell’istruzione sarà il valore cond_true, altrimenti il valore cond_false
41
Tipi immutabili e mutabili
42
• I tipi immutabili vengono passati per copia alle funzioni:• La funzione riceve una copia dei parametri• Le modifiche ai parametri non vengono viste al di fuori della funzione
• I tipi mutabili vengono passati per riferimento alle funzioni:• La funzione riceve il riferimento dei parametri (stile array in C)• Le modifiche ai parametri vengono viste al di fuori della funzione
Tipiimmutabili Tipimutabili
int listfloat dictbool setstrtuple
Dizionari• I dizionari in Python sono uno strumento molto potente che consente di
organizzare i dati sotto forma di coppie <chiave, valore>
• Data una chiave, è possibile chiedere al dizionario di fornirci il relativo valore (se presente)
• La chiave deve essere un tipo immutabile (int, float, str, …) mentre il valore può essere di qualunque tipo
• I dizionari vengono usati comunemente per salvare delle associazioni:
• Dato il nome ed il cognome di una persona (chiave), recuperare il suo numero telefonico (valore di tipo intero)
• Dato il nome di un corso (chiave) recuperare la lista dei docenti che hanno insegnato quel corso (valore di tipo lista)
• Dato il nome di una città (chiave) recuperare l’elenco telefonico degli abitanti di quella città (valore di tipo dizionario)
43
Creare un dizionario
• Un dizionario può essere creato in due modi:• Operatore {}• Funzione dict()
• Esempi di creazione con l’operatore {}
• Esempi di creazione con la funzione dict()
44
chiavevalore
Aggiungere, modificare e rimuovere elementi
• Per aggiungere un elemento al dizionario o modificarlo se già esiste, si utilizzano le parentesi quadre:
• Per rimuovere un elemento dal dizionario partendo dalla sua chiave, si usa pop(chiave):
45
Accedere agli elementi di un dizionario
• Il numero di elementi presenti nel dizionario si ottiene usando len(dizionario)
• Per leggere il valore corrispondente ad una chiave si usano ancora le parentesi quadre
• Per verificare se una chiave esiste si può utilizzare l’operatore in:
46
Iterare sugli elementi di un dizionario
• Un dizionario dà la possibilità di iterare sulle chiavi presenti al suo interno. Sfruttando le chiavi è poi possibile ottenere i valori corrispondenti
• Esempio:
47
Insiemi• L’insieme in Python è un tipo di dato che ha proprietà simili agli
insiemi matematici
• Un insieme contiene un certo numero di elementi tutti distinti tra loro
• Gli elementi di un insieme non sono ordinati (come accade invece per le liste)
• Gli insiemi vengono comunemente usati per verificare la presenza o meno di un certo elemento
48
Creazione di un insieme
• Creazione di un insieme vuoto con set()
• Creazione di un insieme partendo da un iteratore set(iteratore)
• Creazione di un insieme a partire da una lista con set(lista)(elementi duplicati vengono considerati una sola volta)
49
Insiemi: operazioni base
• Inserimento di un nuovo elemento con add(elemento)(inserimenti multipli non hanno effetto)
• Rimozione di un elemento con discard(elemento) (la rimozione di un elemento non presente non genera errore)
• Verificare la presenza di un elemento usando in
50
Iterare sugli elementi di un insieme
• Per ottenere il numero di elementi presenti in un insieme, utilizzare la funzione len(insieme):
• Per scorrere uno ad uno gli elementi di un insieme è sufficiente usare il seguente ciclo for:
51
Insiemi: unione, intersezione, differenza
• Unione C tra l’insieme A e l’insieme B (l’insieme di tutti gli elementi contenuti in A o in B):
• Intersezione C tra l’insieme A e l’insieme B (l’insieme di tutti gli elementi contenuti in A e in B):
• Differenza C tra l’insieme A e l’insieme B (l’insieme di tutti gli elementi contenuti in A ma non in B):
• Per scoprire quali altre operazioni sono possibili sugli insiemi, utilizzate la funzione help ( help(set()) )
52
Funzioni in Python
Funzioni• Le funzioni sono porzioni di programma riutilizzabili, che possono
essere richiamate quando necessario
• Una funzione Python può ricevere 0 o più parametri e generare 0 o più output
• Differenza tra funzioni Python e funzioni C
54
C
- Le funzioni possono ritornare alpiù un risultato
- Occorre dichiarare il tipo deiparametri e del risultato
- Se necessario o lo si desidera, èpossibile definire un prototipo
Python
- Lefunzionipossonoritornarepiùrisultati
- Nonoccorredichiarareitipideiparametriediltipodirisultato
- Lefunzionivengonodefinite/ridefinitedinamicamente:noprototipi
Definizione e chiamata di una funzione
55
• Per definire una funzione si utilizza la parola chiave defseguita dal nome della funzione e dai nomi degli input (attenzione ai “:” finali ed all’indentazione del codice!):
• La chiamata di funzione si esegue specificando il nome della funzione seguita degli eventuali valori di input
• NOTA: al momento della chiamata, la funzione deve essere stata definita
Passaggio di parametri - esempi
56
Qualèl’output?
Passaggio di parametri - esempi
57
Qualèl’output?1) var assumeiltipoint
2) Ilvaloredivarvienecopiatoina
3)modificadelvaloredia
Passaggio di parametri - esempi
58
Qualèl’output?
Passaggio di parametri - esempi
59
Qualèl’output?1) var assumeiltipolist
3)modificaall’oggettoacuiasiriferisce
2) a prendeilriferimentodivar
Passaggio di parametri - esempi
60
Qualèl’output?
Passaggio di parametri - esempi
61
Qualèl’output?1) var assumeiltipolist
3) a riceveilriferimentodiunanuovalista
2) a prendeilriferimentodivar
Funzioni: ritornare i risultati
Per ritornare un risultato, è necessario utilizzare la parola chiave return separando i valori ritornati da virgola
62
Introduzione alle classi in Python
Classi
• Le classi sono delle strutture dati il cui scopo è quello di contenere variabili di tipo diverso e funzioni utili a fornire funzionalità relative ad un certo dato che si vuole rappresentare
• A differenza delle struct presenti in C, le classi possono contenere anche funzioni
• Una istanza di una classe si chiama oggetto
64
C PythonDichiarazionedivariabiliofunzioni
Namespace
• Quando si crea una classe (vale anche per le funzioni), le variabili/funzioni che si dichiarano risiedono all’interno dello spazio dei nomi (namespace) generato per quella classe/funzione
• Il namespace è un mapping da nomi a oggetti (simile ad un dizionario) che permette di invocare gli attributi e funzioni definite all’interno di quel namespace
• Ad esempio, quando parte l’interprete Python, alcune funzioni sono già presenti all’interno del namespace iniziale, come print()
• E’ possibile aggiungere funzioni/attributi e altri namespace ad uno namespace tramite il comando import
65
Scope
• Lo scope è una regione testuale di un programma Python in cui è possibile invocare direttamente attributi/funzioni di un namespace
• Attributi/funzioni di una classe possono essere chiamati in modo diretto solo all’interno della classe stessa, mentre, da fuori, è necessario usare un oggetto della classe per chiamarli (tramite l’utilizzo del “.”)
• All’interno di uno scope, è possibile anche ridefinire attributi/funzioni definite in scope più esterni
66
Esempio
67
varglobale
var ridefinitadatest_scope
Tramiteglobal,test_scopemodificavar
Definizione classe
• Per definire una classe, si usa la keyword class:class nomeClasse:
• All’interno della definizione della classe, si possono dichiarare attributi e funzioni
68
Ilparametroselfserveperindicarelevariabili/funzionidefinitedentrolaclasse,dall’internodellaclassestessa
Creazioneoggetto
selfnonvapassatodurantel’invocazionedellafunzione
Funzione __init__
• E’ possibile definire all’interno della classe una funzione speciale chiamata __init__ che serve per inizializzare gli attributi della classe durante la sua creazione
• Non è necessario che gli attributi siano già stati dichiarati
69
a eb noneranogiàstatidichiarati
Ivaloridi a eb vannopassatidurantelacreazionedell’oggetto
Ereditarietà
• Una classe può essere creata a partire da un’altra classe già esistente e più generica
• La nuova classe eredita tutti gli attributi e funzioni definite nella classe padre
• L’ereditarietà serve per specializzare una classe rispetto ad una classe generica
• Per ereditare da una classe padre, la sintassi è:class classeFiglio(classePadre):
• Python supporta anche l’ereditarietà multipla con la seguente sintassi:
class classeFiglio(classePadre1, classePadre2, classePadre3):
70
Esempio
71
Classedacuisieredita
passservepernondoverspecificarel’implementazionediunaclasse,funzione,ifecc.
Overriding
• L’overriding si usa per ridefinire, all’interno della classe figlio, funzioni che sono state già definite dalla classe padre, in modo da renderle più specifiche per il figlio
• Per eseguire l’overriding, basta ridefinire una funzione usando lo stesso nome
• Di solito si esegue l’overriding del costruttore __init__
72
Esempio
73
Overridingdellafunzione__init__
LafunzioneprintValappartienesoloaclasseFiglio,nonpuòesserechiamatadaclassePadre
File in Python
File
• Python fornisce varie funzionalità per operare su file
• In particolare, permette di:• Aprire,• Leggere,• Scrivere,• Chiudere file
• La documentazione per l’utilizzo di funzioni di I/O è disponibile qui: https://docs.python.org/3/tutorial/inputoutput.html
75
Funzioni su file
• Apertura filef = open(filename, mode)
• Chiusura filef.close()
76
Nomedelfile Modalitàdiapertura:‘r’:lettura‘w’:scrittura(eliminailprecedentecontenuto)‘x’:creaunnuovofileperlascrittura‘a’:scriveincoda‘b’:modalitàbinaria‘t’:modalitàtestuale‘+’:apreunfileperaggiornarlo
Funzioni su file
• Lettura fileout = f.read(size)
out = f.readline()
• Scrittura filef.write(stringa)
77
Leggesize caratteriSeomesso,leggefinoallafinedelfile
Leggeunarigadelfile
ScriveunastringasufileE’quindinecessarioconvertireidatiinstringheperscriverli
Funzioni su file
• Posizione corrente nel fileout = f.tell()
• Cambiare posizione nel file
f.seek(offset, da_dove)
78
Restituiscelaposizionecorrenteall’internodelfile
Offset:spiazzamentodicaratteririspettoadunpuntodiriferimento
da_dove:puntodiriferimentoSe0:iniziofile(valoredidefault)Se1:posizionecorrenteSe2:finefile
Esempio file
79
Seilfilenonèapertoinmodalitàbinaria,lafunzioneseekpuòaverecomepuntodiriferimentosolol’iniziodelfile
Link utili• Sito hackathon
http://xph.necst.it
• Documentazione di Python 3https://docs.python.org/3.4/
• Manuale gratuito di Python 3http://www.diveintopython3.net
• Codecademy – corso interattivo di Pythonhttps://www.codecademy.com/learn/python
• Documentazione di Pynqhttp://www.pynq.io/documentation.html
• Documentazione di NumPyhttp://www.numpy.org
• Documentazione di matplotlibhttp://matplotlib.org
80