Introduzione a Python

30

Transcript of Introduzione a Python

Python

Primi passi in python

Emanuel Di NardoGDG Campania

Un po di storia

Sviluppato nel 1989 da Guido Van Rossum [aka benevolent dictator for life (BDFL)] come semplice “hobby”.Il nome è stato scelto in onore dei Monty Python.La filosofia dietro python si può racchiudere in alcuni versi chiamati “Zen of Python”:

● Beautiful is better than ugly

● Explicit is better than implicit

● Simple is better than complex

● Complex is better than complicated

● Readability counts

Per leggere la versione completa provare questo comando nel terminale:

python -c ‘import this’

Storia

Introduzione

● Linguaggio di programmazione ad oggetti / Scripting;● Linguaggio di alto livello (C / C++ / Java)● Linguaggio interpretato● Prototipazione veloce● Gestione automatica della memoria;● Sintassi semplice;● Tipizzazione dinamica;● Portabilità;

Introduzione

Nel dettaglio

● Indipendente dalla piattaforma;● Interprete scritto in C (“CPython”);● Disponibile per tutte le piattaforme;● Versioni disponibili 2.7.x - 3.4.x;

Download: https://www.python.org/downloads/

Utilizzeremo la versione 2.7!!!● Python 3 non è completamente retrocompatibile!● La maggior parte delle librerie sono scritte in python 2.x

On platform

● Mancanza di punti e virgola “;”● Mancanza di parentesi graffe “{ }”● Operatore di accesso a moduli / metodi “.”● Inizio blocchi “:”● “Indentazione”

Sintassi

Python

>>> print ‘Hello world’ C#include <stdio.h>

int main() {printf(“Hello world”);return 0;

}

Hello World

Pythonprint ‘Hello world'

● Da terminale;● python● python -c ‘codice’

● File python .py;● python hello.py

● Tipi / oggetti “primitivi”:● Numeri;● Boolean (True, False);● Stringhe;

● Strutture dati:● Liste (Array);● Tuple;● Dizionari;

● Tipi “speciali”:● Nulli (None);

Tipizzazione

Python>>> x = 3>>> type(x)>>> <type 'int'>>>> x = 3.5>>> type(x)>>> <type 'float'>

C#include <stdio.h>

int main() {int x = 3;float y = 3.5;return 0;

}

● Interi, reali;● Numeri reali automaticamente riconosciuti come float;● Operazioni matematiche di base (+ - / * ** %)

Numeri

Pythonx = 3y = 3.5sum = x + ydivision = sum / xmult = x * ypo = x ** ymod = 3 % 2

● Si utilizzano doppi apici “stringa” , o apici singoli ‘stringa’;● Stringhe unicode, bytes, raw;● Concatenazione di stringhe “+” formattazione stringhe: %s %d ecc…● Accesso ai caratteri della stringa come se fossero liste;● Conversione automatica (coercion) da numeri a stringhe non permessa!!!● Le stringhe si confrontano semplicemente con ==

Stringhe

Pythons1 = “stringa 1”s2 = ‘stringa 2’s3 = s1 + ‘ ‘ + s2 # concatenaziones4 = s1 + ‘ %s’ % s2 s5 = s1[:-1] + str(5) # acesso parziale ad s1s1 == s2 # confronto

● Liste (Array):● parentesi quadre “[ ]”● keyword list;● accesso tramite indice;

● Tuple:● parentesi tonde “( )”● keyword tuple;● accesso tramite indice;● NON MODIFICABILI!!!

● Dizionari:● parentesi graffe “{ }”● keyword dict;● accesso tramite parola chiave;

● Contenuto non tipizzato!● E’ possibile annidare strutture dati di uguale o diverso tipo;

Strutture dati

Pythonlista = [1, 2, 3] tupla = (1, 2, “ciao”)dizionario = {

‘chiave’: ‘valore’,‘secondo’: 2

}print lista[1]print dizionario[‘chiave’]lista[1] = “stringa” # cambio valore elemento unodizionario[‘secondo’] = ‘2’dizionario[‘terzo] = lista # nuovo valore con oggetti annidatitupla(2) = 0 # errore

● Il casting avviene tramite apposite funzioni;● Interi: int();● Reali: float();● Stringhe: str();● Esistono altre tipologie di conversioni, ma queste sono le principali;

Conversioni di tipo (cast / coercion)

Pythonprint type(int(‘2’))print type(float(3))print type(str(2))print 1 + 2.5print 2 / 3print 2 / 3.print ‘1 2 ‘ + 3 # erroreprint ‘1 2 ‘ + str(3)print ‘1 2 %d’ % 3

Librerie

Pythonimport osfrom sys import exit

print os.getcwd()exit() # invece di sys.exit()

● Keyword “import”● Librerie e moduli personali:

● __init__.py

● if condizione ... elif condizione … else

● Operatore ternario: condizione if … else …

● Non esiste lo switch!

● Per concatenare più espressioni si usano:● keyword “or”;● keyword “and”;

Condizioni

Pythonif 3 > 2:print True

else: # non obbligatorioprint False

if 3 > 4:print True

elif 3 > 2: # non obbligatorioprint True

else: # non obbligatorioprint False

if 3 < 5 < 7:print True

print True if 3 > 2 else False

● for:● Accesso diretto ai valori in liste e tuple;● Accesso diretto alle chiave dei dizionari;

● for … else:● Identico al for, ma se il ciclo termina senzainterruzioni viene richiamato l’else;

● while:● Ciclo condizionale;

● Non esiste il do-while!● Per interrompere un ciclo: break;● Per saltare alla prossima iterazione: continue;

Cicli

Pythonfor i in xrange(10):print i

for i in xrange(10):print i

else:print True

i = 0while i < 10:

i += 1

● in:● Verifica se un elemento è presentein una lista;

● not:● Operatore di negazione;

● is:● Operatore di confronto (identità);● Da non utilizzare per confrontare valori!● Utilizzato per lo più per i confronti con valorinulli;

Operatori utili

Pythona = [1, 2, 3]for i in a:

print iif 2 in a:

print Trueif a is not None:

print Trueb = [1, 2, 3]print a == b # Trueprint a is b # False

● try … except:● Permette di gestire le eccezioni;

● try … except … else:● Se l’eccezione non viene lanciata, verràeseguito l’else;

● try … except … finally:● Il finally viene sempre eseguito;● Se l’eccezione non viene gestita prima delfinally questa viene lanciata di nuovo!

● raise:● Lancia un’eccezione;

Eccezioni

Pythontry:print q

except NameError as e:print e

else:print ‘OK’

finally:print ‘fine’

● Keyword “def”;● Argomenti opzionali e non tipizzati;● Ogni funzione può tornare o meno dei dati, utilizzare la keyword “return”;● Return dinamico, possono ritornare uno o più dati (verrà creata una tupla);● Argomenti con *:

● *args: crea una lista con gli elementi passati alla funzione;● **kwargs: crea un dizionario con gli elementi passati alla funzione;

Funzioni

Python

def print_nome(nome, cognome=None):s = ‘Ciao ‘ + nomeif cognome is not None:

s += ‘ ‘ + cognomeprint s

def moltiplica(num, *args):molt = Noneif len(args) == 0:

molt = [2, 3, 4]else:

molt = args[:]return num*molt[0], num*molt[1], num*molt[2]

nome = raw_input(‘Come ti chiami?’)print_nome(nome)n1, n2, n3 = moltiplica(2)

● Dato “astratto” che definisce un oggetto;

● Attributi (dati interni) e metodi (azioni);

● I dati sono solo pubblici! (underscore “_” per convenzione “private”);

● Accesso alle componenti interne della classe tramite self.componente;

● Ereditarietà “multipla”, polimorfismo;

● Ogni classe eredità da object;

Classi

● Gli attributi possono essere definiti:● All’esterno dei metodi (no self), devono essere inizializzati!● All’interno dei metodi (usare self);

● Gli attributi una volta definiti sono globali all’interno della classe;

● I metodi sono definiti:● in modo simile alle funzioni con la keyword “def”;● il primo argomento deve essere self

● Per accedere ad attributi e metodi si utilizza l’operatore “.”;● L’utilizzo del doppio underscore prima del nome dell’elemento (e al più un underscore dopo il nome) causa name mangling.

Classi - Attributi e metodi

Pythonclass Auto:marca = None

def set_marca(self, marca):self.marca = marca.tolower()self.sigla_marca = self.marca[0:2]

● dir(object) stampa in una lista tutti i metodi e attributi dell’oggetto;

● help(object) visualizza la documentazione relativa all’oggetto se presente;

Funzioni di aiuto

● Ogni classe estende implicitamente “object”;● Per estendere una classe si usano le parentesi tonde;● E’ possibile estendere più di una classe;

● Il costruttore di ogni classe è il metodo __init__;● Per richiamare la superclasse è possibile usare il metodo super;

Classi - Subclassing, costruttore

Pythonclass Auto(Telaio):marca = None

def __init__(self, marca):super(Auto, self).__init__()self.marca = marca.tolower()

● Web development:● Django;● Bottle;● Flask;● App Engine;

● Standalone development & GUI:● wxPython;● PyQt;● TkInter;

● Scientific calculus:● SciPy;● Matplotlib;● “Anaconda”;

Utilizzo

● “IDE”:● Editor di testo (Sublime Text);● PyCharm;● Spyder;

● Installazione automatica moduli:● pip; (pip install module_name)● easy_install; (easy_install module_name)

● Installazione manuale moduli:● python setup.py install;

● Eseguibili:● pyinstaller;● py2exe;● py2app;

Utility

Demo

<Thank You!>

email:G+ plus.google.com/+EmanuelDiNardotwitter @bboymasawebsite http://emanueldinardo.com

[email protected]