I moduli Python. Marco Barisione. Cosa sono i moduli. Come scrivere un modulo. Importare un modulo (1) Importare un modulo (2) Importare un modulo (3)



Documenti analoghi
Marco Barisione. Marco Barisione. I moduli Python

FPf per Windows 3.1. Guida all uso

Riccardo Dutto, Paolo Garza Politecnico di Torino. Riccardo Dutto, Paolo Garza Politecnico di Torino

Introduzione al Linguaggio C

Introduzione al Python

SQL Server Integration Services. SQL Server 2005: ETL - 1. Integration Services Project

Funzioni in C. Violetta Lonati

Cenni di programmazione distribuita in C++ Mauro Piccolo

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 18 31/03/2014

2.5. L'indirizzo IP identifica il computer di origine, il numero di porta invece identifica il processo di origine.

Lezione 10: Librerie e compilazione separata

Introduzione all uso di Eclipse

Modulo. Programmiamo in Pascal. Unità didattiche COSA IMPAREREMO...

Servizio di backup dei dati mediante sincronizzazione

La prima applicazione Java. Creazione di oggetti - 1. La prima applicazione Java: schema di esecuzione. Gianpaolo Cugola - Sistemi Informativi in Rete

10.1. Un indirizzo IP viene rappresentato in Java come un'istanza della classe InetAddress.

Laboratorio di Informatica

GESGOLF SMS ONLINE. Manuale per l utente

Il web server Apache Lezione n. 3. Introduzione

20. Appunti sulle liste (gestione in linguaggio C#) 16/04/2015 Arraylist

GRUPPO CAMBIELLI. Posta elettronica (Webmail) Consigli di utilizzo

Esercitazione 05. Sommario. Packet Filtering [ ICMP ] Esercitazione Descrizione generale. Angelo Di Iorio (Paolo Marinelli)

Appunti di Informatica 1

19. LA PROGRAMMAZIONE LATO SERVER

Laboratorio di Programmazione in rete

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione

Esercizio 2. Client e server comunicano attraverso socket TCP

Calcolare il massimo di una lista

Installazione & Configurazione Php e MySQL su Mac Os X. Php

GUIDA ALLA PROGRAMMAZIONE GRAFICA IN C

Visual Basic.NET La Gestione degli Errori di Federico BARBATI

MILANO - DIJON - TVA: FR

GUARINI PATRIMONIO CULTURALE VERSIONE MSDE/SQL SERVER MANUALE DI INSTALLAZIONE GUARINI PATRIMONIO CULTURALE VERSIONE MSDE/SQL SERVER

costruttori e distruttori

2010 Ing. Punzenberger COPA-DATA Srl. Tutti i diritti riservati.

Manuale Terminal Manager 2.0

MANUALE UTENTE Fiscali Free

Capitolo 4 Pianificazione e Sviluppo di Web Part

Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it

Sistemi Operativi. Interfaccia del File System FILE SYSTEM : INTERFACCIA. Concetto di File. Metodi di Accesso. Struttura delle Directory

I file di dati. Unità didattica D1 1

Tale attività non è descritta in questa dispensa

Registratori di Cassa

GERARCHIE RICORSIVE - SQL SERVER 2008

Introduzione all' OO in Python

AVCP Generatore di XML

1 Riconoscimento del soggetto richiedente da parte del sistema

Corso basi di dati Installazione e gestione di PWS

Tutorial per l installazione del J2SE 6 e configurazione del sistema operativo

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

LaCie Ethernet Disk mini Domande frequenti (FAQ)

Link e permessi. Corso di Laurea Triennale in Ingegneria delle TLC e dell Automazione. Corso di Sistemi Operativi A. A

Guida all utilizzo del compilatore lcc-win32 per creare una applicazione console

TERMINALE. Creazione e gestione di una postazione terminale di Eureka

PORTALE CLIENTI Manuale utente

AdmiCash Manutenzione dei dati

Fate doppio click sul file con nome postgresql-8.0.msi e impostate le varie voci come riportato nelle immagini seguenti:

Database 1 biblioteca universitaria. Testo del quesito

Guida per l utilizzo del software Registro Pazienti v1.2

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena

MANUALE D'USO DEL PROGRAMMA IMMOBIPHONE

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Uso delle tabelle e dei grafici Pivot

IPC System V. Code di messaggi

Stream EDitor (sed) sed NON modifica l'input 2. L'output viene inviato allo standard output e puo' essere rediretto

INSTALLAZIONE ProFORMA 3_5 EURO

Il Web Server e il protocollo HTTP

MANUALE UTENTE UTILIZZO MODULO FILE-STORAGE DI ACS - CANALE AMBIENTE PROVINCIA DI TORINO

EDICOLA MANAGER EM Importer

GUIDA UTENTE BILLIARDS COUNTER (Vers )

5-1 FILE: CREAZIONE NUOVO DOCUMENTO

L ACQUISIZIONE E LA GESTIONE DEI DOCUMENTI ELETTRONICI

MODULO STAMPA BOLLETTINO PDF

Inizializzazione, Assegnamento e Distruzione di Classi

Inizializzazione degli Host. BOOTP e DHCP

Corso Eclipse. Prerequisiti. 1 Introduzione

RISOLUTORE AUTOMATICO PER SUDOKU

Guida Rapida all uso del License Manager di ROCKEY4Smart (V )

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

NOZIONI BASE SHELL E SCRIPT LINUX

L archiviazione della posta elettronica può aiutarci a recuperare spazio senza costringerci a cestinare documenti importanti

2010 Ing. Punzenberger COPA-DATA Srl. Tutti i diritti riservati.

Il linguaggio HTML - Parte 4

Organizzazione degli archivi

2010 Ing. Punzenberger COPA-DATA Srl. Tutti i diritti riservati.

2010 Ing. Punzenberger COPA-DATA Srl. Tutti i diritti riservati.

per immagini guida avanzata Uso delle tabelle e dei grafici Pivot Geometra Luigi Amato Guida Avanzata per immagini excel

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Manuale d uso [Rev.1 del 07/08/2015] Manutenzione impianti termici Ver [05/01/2015]

LA GESTIONE DELLE VISITE CLIENTI VIA WEB

Xampp. Valeriano Maysonnave - A.A. 2014/2015 -

NOZIONI BASE PER ESERCITAZIONI

ShellExcel. Una domanda contiene i riferimenti (#A, #B, #C) alle celle che contengono i dati numerici del

Parte II: Reti di calcolatori Lezione 10

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

Bot Tutorial. NTR Italia Via Sangro, Milano Tel Fax

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni server

URI. Introduzione. Pag. 1

Transcript:

Marco Barisione I moduli Python Cosa sono i moduli Quando il programma cresce è necessario suddividere lo script in più parti In C non esiste il concetto di modulo I file vengono compilati separatamente I diversi file conscono ciò che si trova negli altri includendo gli header È necessario tenere gli header aggiornati con i sorgenti In Python i moduli sono normali sorgenti Per poter usare le funzioni, classi e variabili definite in un modulo è necessario importarlo 2 Come scrivere un modulo Per scrivere un modulo è semplicemente necessario scrivere il codice in un file "Questa è la doc-string del modulo somma.py" def somma(a, b): return a + b print "È stato importato il modulo" Se la prima riga del modulo è una stringa questa diventa la doc-string Il codice all interno del modulo viene eseguito Questo non vuol dire che la funzione è richiamata! Generalmente ciò che è fuori dalle funzioni e dalle classi serve per inizializzare il modulo o stampare informazioni si debug Importare un modulo (1) import modulo Per riferirsi ad un membro del modulo è necessario accedervi con modulo.membro È il metodo più usato per importare Si evitano collisioni di nomi (fatto frequente in C) >>> import somma >>> print somma <module 'somma' from 'somma.py'> >>> print somma. doc Questa è la doc-string del modulo somma.py >>> print somma.somma(5, 3) 3 Importare un modulo (2) from modulo import funzione1, funzione2, classe1 Importa dal modulo solo poche funzioni o classi Se usato per le variabili non si ottiene il risultato aspettato Si crea una variabile locale con lo stesso nome e che si riferisce allo stesso oggetto di quella del modulo L assegnando di un nuovo valore alla variabile è locale Scomodo se bisogna importare molti membri del modulo >>> from somma import somma >>> print somma(5, 3) Importare un modulo (3) from modulo import * Importa tutti i membri del modulo eccetto quelli che iniziano per _ Sporca il namespace locale, rischiando di creare conflitti Sconsigliato se non per alcuni moduli che usano altri metodi per evitare conflitti Ad esempio tutti i membri iniziano con lo stesso prefisso >>> from somma import * >>> print somma(1, 3) 5 6 1

Come viene trovato un modulo Il modulo sys contiene la variabile path Python cerca in tutte le directory indicate nella in sys.path fino a quando trova un modulo con il nome corrispondente sys.path è una normale lista È possibile aggiungere nuove directory di ricerca a runtime sys.path.append("~/moduli") All avvio di Python sys.path è inizializzato per contenere: La directory corrente Le directory indicate nella variabile d ambiente PYTHONPATH Alcune directory di default dipendenti dall installazione 7 Byte-compilazione Quando un file viene importato per la prima volta viene creato un file con lo stesso nome ma con estensione.pyc Nel file viene inserito il modulo byte-compilato L esecuzione di questo file non è più veloce, è solo più veloce la fase di caricamento Alla successiva esecuzione (se il file.py non è stato modificato) viene importato il file.pyc Un applicazione può essere distribuita solo con i file compilati, senza i file sorgente Moduli compilati in linguaggio macchina Alcuni moduli possono essere scritti in C (o altri linguaggi) e compilati in linguaggio macchina Su Unix sono shared object con estensione.so Su Windows sono DLL con estensione.pyd In caso di conflitto dovuto all esistenza di due moduli con lo stesso nome, uno compilato e l altro sorgente viene importato quello compilato Package Con package si intende una collezione di moduli Quandi i moduli crescono è naturale raggrupparli assieme Un esempio di possibile struttura è la seguente: suoni/ formati/ wav.py mp3.py effetti/ eco.py All interno di ogni directory del package è necessario un file init.py 9 10 Importare da un package Normali forme di importazione da package sono: import suoni.formati.mp3 from suoni.formati import mp3 from suoni.formati.mp3 import Mp3File Per riferirsi a Mp3File si usano rispettivamente: suoni.formati.mp3 mp3.mp3file Mp3File from suoni.formati import * non può funzionare a causa delle limitazioni di alcuni file system Il problema può essere risolto inserendo in suoni/formati/ una lista chiamata all con l elenco di tutti i moduli contenuti nel package all = ["mp3", "wav"] main Spesso è utile poter importare un file ma poterlo eseguire anche separatamente È quindi necessario avere una sezione di codice eseguita solo se il modulo non è stato importato La variabile name contiene il nome del modulo Se il modulo è quello principale (non è stato importato) il suo nome è main def foo():... if name == " main ": # eseguito solo se è il modulo principale 11 12 2

os environ un dizionario contenente le variabili d ambiente popen(cmd, mode) apre una pipe da o per cmd chdir(path) cambia la directory corrente getcwd() ritorna la directory corrente chmod(path, mode) cambia il modo di path al modo numerico mode listdir(path) ritorna la lista di file e directory in path mkdir(path[, mode]) crea la directory path, il default di mode è 0777 remove(path) cancella il file path rmdir(path) cancella la directory (vuota) path rename(old, new) rinomina il file o directory old a new fork() ritorna 0 nel processo figlio, l id del processo filglio nel genitore (solo Unix) system(cmd) esegue il comando cmd os.path isfile(path), isdir(path) ritornano vero se path è, rispettivamente, un file normale o una directory exists(path) vero se path esiste split(path) ritorna una tupla contenente il nome della directory di path e il nome del file dirname(path) equivalente a split(path)[0] basename(path) equivalente a split(path)[1] abspath(path) ritorna il percorso assoluto di path splitext(path) ritorna una tupla contenente nome del file ed estensione (. compreso) 13 1 shutil copyfile(src, dst) copia src su dst copytree(src, dst) copia la directory src su dst rmtree(path) cancella ricorsivamente la directory path sys argv una lista contenente gli argomenti sulla linea di comando exit([arg]) esce dal programma, equivalente a lanciare un eccezione SystemExit path lista di directory in cui cercare i moduli stdin, stdout, stderr stream standard, possono essere sostituiti con altri file stdin, stdout, stderr, valori originali degli stream standard 15 16 glob glob(pathname) ritorna una lista di file che corrispondono a pathname Può contenere *,? e intervalli di caratteri Non viene eseguita l espansione di ~ >>> os.listdir ('.') ['1.gif', '2.txt', 'card.gif'] >>> import glob >>> glob.glob('./[0-9].*') >>> glob.glob('*.gif') ['1.gif', 'card.gif'] >>> glob.glob('?.gif') ['1.gif'] math Contiene le funzioni matematiche principali pi pi greco ( ) ~ 3.11592653597931 e ~ 2.7121259051 floor(n) approssima n all intero inferiore ceil(n) approssima n all intero superiore round(n) approssima n all intero più vicino fabs(n) ritorna il valore assoluto (a virgola mobile) di n Esiste la funzione globale abs che ha comportamento simile Le altre funzioni sono simili a quelle per il C contenute in math.h 17 1 3

exceptions Contiene la classe Exception dalla quale normalmente sono derivate le eccezioni Il costruttore di Exception accetta come argomento la descrizione dell errore Generalmente è sufficiente derivare da Exception e aggiungere una descrizione from exceptions import Exception class MioErrore(Exception): def init (self, descr="blah blah..."): Exception. init (self, descr) raise MioErrore raise MioErrore, "Messaggio di errore..." 19 socket socket(family, type) crea un nuovo socket, family è normalmente AF_INET, type è SOCK_STREAM o SOCK_DGRAM connect((host, port)) apre una connessione verso la porta port di host bind((host, port)) si mette in ascolto sulla porta port di host listen(n) imposta il massimo numero di connessioni in attesa accept() ritorna una tupla, contenente il nuovo socket della connessione e l indirizzo del client recv(n) legge al massimo n bytes Ritorna una stringa vuota quando il client ha chiuso il socket send(str) invia str sul canale close() chiude la connessione makefile(mode) ritorna un oggetto file associato al socket 20 ftplib from ftplib import FTP conn = FTP('ftp.python.org') conn.login() conn.cwd('pub/www.python.org/ftp/python') print 'Ecco cosa contiene la directory' conn.retrlines('list') output = open('readme', 'wb') conn.retrbinary('retr ' + 'README', output.write) conn.quit() urllib (1) Esiste un modo ancora più facile per scaricare un file, sia esso locale, su un server ftp, su un server http ecc. from urllib import urlretrieve what = raw_input("cosa vuoi scaricare? ") outfile = raw_input("con che nome salvo il" " file? ") urlretrieve(what, outfile) 21 22 urllib (2) quote(s) ritorna s convertito in modo da poter essere utilizzato come indirizzo Web >>> print quote("www.xx.xx/~marco/") www.xx.xx/%7emarco/ quote_plus(s) come quote ma converte anche gli spazi in + unquote(s), unquote_plus(s) l inverso delle precedenti funzioni urlencode(diz) trasforma il dizionario in una stringa adatta ad essere passata ad uno script CGI >>> print urlencode({"nome": "Mario",... "cognome": "De Rossi"}) cognome=de+rossi&nome=mario 23 poplib import poplib p = poplib.pop3('pop3.xxx.xx') p.user("xxxx@xxx.xx") p.pass_("***") n_msg = len(p.list()[1]) for i in range(n_msg): print "\n".join(p.retr(i+1)[1]) if (raw_input("cancello? ") == "OK"): p.dele(i) p.quit() 2

smtplib msg = """From: <me@myself.com> To: <xxxx@xxx.xx> Ciao mondo!. """ import smtplib server = smtplib.smtp('smtp.xxx.xx') server.sendmail("me@myself.com", "xxxx@xxx.xx", msg) server.quit() 25 5