Funzioni e moduli. Andrea Passerini Informatica. funzioni e moduli

Documenti analoghi
Unità Didattica 3 Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

Introduzione al Python

PYTHON CHEAT SHEET. Rapido documentazione di consultazione per istruzioni, funzioni e tipi in Python. #stampa le variabili x e y

UD4 - MATLAB. M-file. Efficienza degli algoritmi. Formati d uscita

Fondamenti di Programmazione

Programmazione Orientata agli Oggetti in Linguaggio Java

Sistemi Web per il turismo - lezione 3 -

VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.

Gestione di files Motivazioni

3. Terza esercitazione autoguidata: progetto gestione voli

Calcolare il massimo di una lista

Manuale di configurazione e utilizzo Barcode card

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

Informatica Teorica. Macchine a registri

Lezione 6 Le pile. Informatica. 28 Aprile 2016

Files in C++ Fondamenti di Informatica. R. Basili. a.a

Moduli Bluetooth 03 - connessione seriale via BT

Cosa è importante: pom.xml Goal Plug-in Repository

Manuale d uso DropSheep 4 imaio Gestione Pixmania-PRO Ver 1.1

Laboratorio di Basi di Dati

anno Introduzione all'algoritmica per i Licei 5 Funzioni.

Introduzione all' OO in Python

TUTORATO di LINGUAGGI I

Il comando provoca il salvataggio dello stato e la terminazione dell esecuzione.

Guida per invitare più di 500 contatti ad un evento Facebook. By Andrea Mancini

Esame di Informatica Generale 25 giugno 2010 Professori: Carulli, Fiorino, Mazzei

Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main

Laboratorio di Programmazione Lezione 1. Cristian Del Fabbro

XML e Windows Phone. Semplice tutorial per l'utilizzo di documenti e dati XML in un'app per Windows Phone.

un file in formato FASTA contenente un elenco di sequenze una espressione regolare una indicazione se si tratta di DNA,RNA,proteine

Uso degli oggetti. Un programma Java. è un insieme di oggetti, ognuno istanza di una classe, che si inviano messaggi

Laboratorio di Informatica

7 Disegni sperimentali ad un solo fattore. Giulio Vidotto Raffaele Cioffi

Il calcolatore. Architettura di un calcolatore (Hardware)

IL CONCETTO DI FILE. È illecito operare oltre la fine del file.

Gestione delle eccezioni in Java

Java Native Interface Appunti

Supporto On Line Allegato FAQ

Miscelazione di benzine

MANUALE 3DPRN ware 1

I file Laboratorio di Linguaggi di Programmazione a.a. 2001/2002

PARTE III MACCHINE A REGISTRI

INFORMATICA E PROGRAMMAZIONE PROF. M. GIACOMIN ESPERIENZA IN AULA: ELABORAZIONE DI IMMAGINI A COLORI IN LINGUAGGIO C

Ingegneria del Software 1: Eclipse

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

ISTRUZIONI VELOCI DI PYTHON Versione (manuale realizzato con Google Documenti)

VARIABILI LOCALI E GLOBALI (ESTERNE)

AE RZT QSO RKPT SQZC

HP LED Driver Shield. EtherMania di Signorini Marco Via Cadore MALNATE (VA) P.I REA VA

PROTOCOLLO ITACA PUGLIA RESIDENZIALE Istruzioni d'uso del software Versione 1.0

2) FILE BINARI: è una sequenza di byte avente una corrispondenza uno a uno con la sequenza ricevuta dal dispositivo esterno.

Introduciamo l'uso della programmazione ad oggetti in PHP...perchè si può fare!

AA LA RICORSIONE

Nomi e Ambiente. Nicola Fanizzi. Linguaggi di Programmazione [010194] 20 apr, Dipartimento di Informatica Università degli Studi di Bari

Linguaggi. Rosario Culmone, Luca Tesei. 20/10/2009 UNICAM - p. 1/32

Creare una funzione float square(float x). La funzione deve restituire il quadrato del parametro x.

PSICOMETRIA. Esercitazione n.1. C.d.L. Comunicazione e Psicologia a.a. 2012/13

Linguaggio C - Funzioni

intermediate - prendere confidenza con gli hook di subversion (SVN) [!]in 3 passi[!] *updated*

3.5.1 PREPARAZ1ONE I documenti che si possono creare con la stampa unione sono: lettere, messaggi di posta elettronica, o etichette.

Le sue caratteristiche:

Ingegneria del Software

Come creare un modulo con Google Drive

Aggiorna. La Funzione Aggiorna Listino Aggiornare Listino Pr7 / Le connessioni / Listino METEL. Aggiorna Lis no. Aggiornamento del listino

SQL Server Architettura Client-Server. SQL Server Introduzione all uso di SQL Server Dutto Riccardo.

IL SITO ISTITUZIONALE DELLA SCUOLA ITIS E. MATTEI - URBINO MANUALE D USO

COMPILAZIONE. Tarsformazione di linguaggi

(1) (2) (3) (4) 11 nessuno/a (1) (2) (3) (4) X è il minore tra A e B nessuno/a X è sempre uguale ad A X è il maggiore tra A e B

ESERCIZI DEL CORSO DI INFORMATICA

CAPITOLO V. DATABASE: Il modello relazionale

Importazione dati. e/fiscali Spesometro - Rel con gestionale e/satto. Gestionale e/satto

Sistemi Operativi. Gianluca Della Vedova. Sistemi Operativi. Gianluca Della Vedova. Sistemi Operativi. Gianluca Della Vedova.

Importazione di files di domande in formato "Aiken"

Guida rapida di installazione e configurazione

Basi di dati (6) Docente: Andrea Bulgarelli. Università di Modena e Reggio Emilia. andrea.bulgarelli@gmail.com Argomento: T-SQL (1.

Associazioni dei file. Mike McBride Traduzione del documento: Andrea Di Menna Manutenzione della traduzione: Federico Zenith

MBD-R100 Guida rapida alla configurazione del Modem Router/Wireless gatway Huawei B660/B683 (VERSIONE CON E SENZA USCITA RJ11 PER TEL.

Classe 1A Corsi di recupero, giugno 2013

Gestione dei File in C

2.2 Scheduling in Linux

NOTE RILASCIO IATROS SISS v. 2.X

Via Oberdan, 42, Faenza (RA) Italy Tel.: Fax: WAVE MODE MOBILE GUIDA RAPIDA

Catalogo

Il Manuale di KXSLDbg. Keith Isdale Traduzione del documento: Samuele Kaplun Traduzione del documento: Simone Solinas

Introduzione alle macchine a stati (non definitivo)

Cliens Redigo Versione Aggiornamento al manuale.

Guida all utilizzo di Campaign Builder

Metodi Computazionali della Fisica Secondo Modulo: C++

Manuale del software Supplemento. Comunicazione tra sensore per rilevamento oggetti O2D2xx e Siemens Simatic S / / 2011

DAL DIAGRAMMA AL CODICE

SIREA: SISTEMA DI REVISIONE DELLE ANAGRAFI

Codifica: dal diagramma a blocchi al linguaggio C++

Elettronica dei Sistemi Programmabili A.A Microcontrollori. Introduzione allo sviluppo di progetti

Gestione centralizzata caselle PEC per l INFN. Alessandro Brunengo, per il gruppo Mailing

Prof. Pagani Corrado HTML

Introduzione alla programmazione in C

Sistemi Operativi Anno Accademico 2011/2012. Segnali: Interrupt software per la gestione di eventi asincroni

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Primo scritto 11 Gennaio 2008

L organizzazione dei documenti nei sistemi multimediali

2 - Introduzione al linguaggio Java

Transcript:

Funzioni e moduli Andrea Passerini passerini@disi.unitn.it Informatica

Funzioni nella programmazione Descrizione Una funzione è una sequenza di istruzioni cui viene dato un nome Questo permette di riutilizzare tale sequenza di istruzioni in più parti del proprio programma (o in altri programmi) senza doverla scrivere ogni volta Inoltre, è possibile modificare la funzione e l effetto si ripercuoterà dovunque venga usata, semplificando la manutenzione e lo sviluppo del codice. Una funzione più prendere in ingresso uno o più argomenti, o parametri Una funzione può restituire in uscita un risultato

Funzioni nella programmazione Uso Problemi complessi devono essere decomposti via via in problemi sempre più semplici per poter essere risolti Tale concetto è alla base della programmazione strutturata Le funzioni permettono di implementare agevolmente tale decomposizione, occupandosi ciascuna di sottoproblemi specifici Ovviamente una funzione può chiamare altre funzioni al suo interno per risolvere dei sottoproblemi Inoltre, una funzione sufficientemente generica può essere usata in vari contesti diversi

Funzioni in Python Descrizione Una funzione è un tipo particolare di statement composto: def <name>(arg1,arg2,...,argn): <statements> Come tutti gli statements composti, consta di un intestazione terminata da : e di un blocco indentato di statement annidati, e finisce quando finisce l indentazione def definisce lo statement come la creazione di una funzione name è il nome della funzione, con cui dovrà essere chiamata per usarla arg1,arg2,...,argn sono gli argomenti della funzione (da zero ad un numero arbitrario) statements sono il corpo della funzione, che ne esegue le operazioni

Funzioni in Python Descrizione Se la funzione ha degli ingressi, il suo corpo tipicamente eseguirà delle operazioni che li coinvolgono def print_max(l): max = l[0] for e in l[1:]: if e > max: max = e print max Una funzione può restituire un oggetto in uscita tramite lo statement return def max(l): max = l[0] for e in l[1:]: if e > max: max = e return max

Funzioni in Python Descrizione Lo statement return non deve essere necessariamente l ultimo nel corpo della funzione, né essercene uno solo Nell esecuzione, la funzione terminerà la prima volta che esegue uno statement return, restituendo l oggetto relativo. def ha_negativo(l): for e in l: if e < 0: return True return False Le funzioni che non hanno return (o che terminano senza averne incontrato nessuno) restituiscono None di default

Funzioni in Python Descrizione Per le funzioni che restituiscono un risultato, questi tipicamente sarà usato in un espressione, o assegnato direttamente ad una variabile l = [2,3,5,1,2,3] m = max(l) n = m - max([3,4,5]) if ha_negativo(l): print "trovato negativo"

Funzioni in Python Attenzione E un errore molto comune assegnare ad una variabile il risultato di una funzione che restituisce None L errore si commette facilmente con i metodi di modifica di lista o dizionario, che modificano l oggetto ma restituiscono None >>> L = [0,1,2,3] >>> L = L.extend([4,5]) >>> L >>> # L contiene None!

Funzioni in Python Restituire più oggetti E possibile restituire un numero arbitrario di oggetti, mettendoli in una tupla def max_min(l): max = min = l[0] for e in l[1:]: if e > max: max = e elif e < min: min = e return max,min

Funzioni in Python Restituire più oggetti Il risultato più come sempre essere assegnato ad una tupla o direttamente alle sue variabili: l = [2,3,1,5,6] t = max_min(l) max,min = max_min(l) print t print max,min produce (6, 1) 6 1

Argomenti Descrizione Gli argomenti di una funzione sono nomi di variabili che la funzione utilizzerà al suo interno Nel chiamare una funzione, gli argomenti vengono passati specificando oggetti o variabili all interno delle parentesi dopo il nome della funzione, nello stesso ordine con cui appaiono nello statement della funzione Il risultato è che l oggetto o la variabile vengono assegnati alle variabili della funzione nelle posizioni corrispondenti

Argomenti Esempio def stampa(a1, a2, a3): print a1, a2, a3 l = [0,2] s = "av" stampa(l, s, (1,2,3)) produce [0, 2] av (1, 2, 3)

Argomenti Polimorfismo La funzione stampa può prendere in ingresso oggetti di qualunque tipo, finché possono essere stampati tramite print Tale caratteristica è chiamata polimorfismo, ed è la stessa che permette di sommare due stringhe o due numeri con l operatore + Polimorfismo significa che il risultato di un operazione (o di una funzione) dipende dal tipo degli operandi (o degli argomenti) Questo permette di scrivere un unica funzione che opera su oggetti di vari tipi diversi, ammesso che le operazioni eseguite al suo interno siano compatibili con i tipi degli argomenti

Polimorfismo Esempio Somma di lista di interi, o concatenazione di stringhe def somma(l): res = l[0] for e in l[1:]: res += e return res i = somma([1,2,3,4]) s = somma(["a","b","c","d"]) print i,s produce 10 abcd

Argomenti argomenti mutabili Se un argomento passato ad una funzione è di tipo mutabile, le modifiche ad esso fatte all interno della funzione si ripercuoteranno all oggetto esterno (la funzione manipola un riferimento a tale oggetto) def elimina_valore(d, val): for (k,v) in d.items(): if v == val: del d[k] d = {"a" : 1, "b": 2, "c" : 2, "d" : 3} elimina_valore(d,2) print d produce { a : 1, d : 3}

Variabili locali Scope Tutte le variabili definite (assegnando loro un valore) all interno di una funzione sono locali ad essa Una variabile locale è visibile solo all interno della funzione (il suo spazio di visibilità o scope) Una variabile non può essere usata al di fuori del suo spazio di visibilità def somma(l): res = l[0] # variabile locale for e in l[1:]: res += e return res r = somma([1,2,4]) print res # errore! variabile fuori scope

Scope Scope locale e globale Lo scope è un concetto fondamentale della programmazione strutturata La visibilità locale delle funzioni permette un elevato grado di indipendenza rispetto ai programmi in cui saranno chiamate (non ci si deve preoccupare se i nomi di variabili in esse definiti sono già usati altrove) Esiste uno scope globale che è esterno alle funzioni, e copre tutto il file in cui le funzioni si trovano (o vengono chiamate)

Scope Scope locale e globale Le variabili definite al di fuori delle funzioni, sono visibili anche al loro interno def globali(): print x,y x,y = 1,2 globali() produce 1 2

Scope Variabili globali E buona programmazione non usare MAI variabili globali all interno delle funzioni Una funzione dovrebbe comunicare con l esterno SOLO tramite argomenti in ingresso e risultati in uscita Usare variabili globali rende la funzione difficilmente comprensibile, non essendo caratterizzata totalmente da ingressi ed uscite L uso di variabili globali contrasta con la programmazione strutturata ed è spesso fonte di errori

Scope Variabili globali vs variabili locali Se una variabile locale ha lo stesso nome di una variabile globale esistente, la prima nasconde la seconda, che è come se non esistesse per la funzione def somma(l): res = l[0] for e in l[1:]: res += e return res res = 0 r = somma([1,2,4]) print r,res produce 7 0

Scope Argomenti Gli argomenti di una funzione vengono assegnati alle variabili locali nelle posizioni corrispondenti Quindi la variabile locale e quella passata come argomento sono diversi riferimenti allo stesso oggetto (anche se hanno lo stesso nome!) Riassegnare alla variabile locale un oggetto diverso non modifica in alcun modo la variabile esterna

Scope e argomenti Esempio def cambia(l): l = "stringa" print l l = [1,2,3] cambia(l) print l produce stringa [1, 2, 3]

Documentazione help e funzioni Abbiamo visto che la funzione help fornisce informazioni utili su funzioni e metodi help recupera tali informazioni dall intestazione della funzione, e da una stringa di testo scritta all inizio (come prima istruzione della funzione) se presente Documentare il codice con appropriati commenti è sempre molto utile per capirlo successivamente o farlo capire ad altri, e la stringa di documentazione è un aspetto che rende le funzioni Python facilmente auto-esplicative.

Documentazione Esempio def somma(l): "somma il contenuto di una lista" res = l[0] for e in l[1:]: res += e return res print help(somma) produce Help on function somma in module main : somma(l) somma il contenuto di una lista

Moduli Descrizione Nella sua forma più semplice, un modulo è un file di testo contenente codice Python, e salvato con estensione.py Un modulo contiene tipicamente funzioni o altri oggetti di utilità che possano essere usati dai programmi Una grandissima quantità di moduli sono stati realizzati per gli usi più svariati (vedremo) Esiste un set di moduli standard che è disponibile di default nella maggior parte delle installazioni di Python (e.g. pickle, re)

Moduli Funzionamento Per poter essere utilizzato in un programma, un modulo deve essere importato Abbiamo visto come importare moduli con lo statement import >>> import pickle >> f = open("tmp","w") >>> pickle.dump(s,f)

Moduli Ricerca Il file contenente il modulo pickle è stato individuato da Python perché la directory che lo contiene è tra quelle che Python ricerca durante un pickle (è un modulo di standard) Le librerie di moduli che installerete se necessario aggiorneranno questo spazio di ricerca, ed i moduli potranno essere caricati allo stesso modo Moduli creati da voi potranno essere facilmente importati allo stesso modo se nella stessa directory del file che li importa (esistono altri modi che non vedremo)

Moduli Uso Una volta importato, un modulo può essere usato, ad esempio chiamando le sue funzioni Per poter chiamare la funzione di un modulo, deve essere preceduta dal nome del modulo seguito da punto: >>> pickle.dump(s,f) Questo perché dump è un metodo dell oggetto pickle Allo stesso modo, in l.append() append è un metodo di un oggetto di tipo lista

Moduli Uso In un programma di dimensioni ragionevoli, esiste un file principale da cui parte l esecuzione ed una serie di moduli che forniscono le funzionalità necessarie (possibilmente utilizzabili anche da altri programmi) tali moduli tipicamente contengono funzioni e/o altri oggetti, ma non codice che produca risultati se eseguiti direttamente, poiché sono fatti per essere usati da altri programmi sia il file principale sia i moduli possono importare ed utilizzare anche moduli esterni, tipo il set standard o altri

Moduli Esempio File utility.py (da usare come modulo): def somma(l): res = l[0] for e in l[1:]: res += e return res def max_min(l): max = min = l[0] for e in l[1:]: if e > max: max = e elif e < min: min = e return max,min

Moduli Esempio File run.py (da usare come file principale): import utility l = [2,4,5,6,1,3] s = utility.somma(l) max,min = utility.max_min(l) print s,max,min Risultato dell esecuzione di run.py: 21 6 1

Moduli Statement from A volte risulta pesante dover sempre precedere una funzione con il nome del modulo che la contiene Per poter chiamare una funzione direttamente, basta importarla con lo statement from: >>> from <nomemodulo> import <funzione> Se <funzione> viene sostituito con *, tutte le funzioni del modulo possono essere chiamate direttamente

Moduli Esempio from utility import somma l = [2,4,5,6,1,3] s = somma(l) max,min = utility.max_min(l) print s,max,min oppure from utility import * l = [2,4,5,6,1,3] s = somma(l) max,min = max_min(l) print s,max,min