Funzioni Ordinamento di liste con selection_sort
Transcript
Funzioni Ordinamento di liste con selection_sort
Un piccolo esempio: script # Script per calcolare il perimetro e l'area # di un rettangolo, dati i suoi lati side1=input('Inserisci la lunghezza della base: ') side2=input("Inserisci la lunghezza dell'altezza: ") per=2*side1+2*side2 area=side1*side2 print "Il perimetro e': ", per print "L'area e': ", area DEI - Univ. Padova (Italia) Un piccolo esempio • Ogni volta che si abbia bisogno di riutilizzare il codice che calcola area e perimetro del rettangolo si deve ricopiare tutta la sequenza istruzioni. Riscrivere le stesse istruzioni più volte: Spreco di tempo Facilità di errori di ricopiatura DEI - Univ. Padova (Italia) Se mi accorgo di un errore devo modificare le istruzioni ovunque le abbia utilizzate Funzioni • Una funzione è una sequenza di istruzioni Python identificata da un nome. • Si differenzia da uno script in quanto il suo scopo principale è quello di produrre uno o più valori a partire da determinati dati di ingresso (cosa che stabilisce un'analogia con l'omonimo concetto della matematica), • Sono utili per automatizzare dei blocchi di istruzioni che si devono eseguire ripetitivamente dal prompt dei comandi. Possono operare solo sui dati forniti come ingresso alla funzione e sulle variabili create all’interno della funzione • Qualsiasi variabile creata nella funzione, ad eccezione di quelle esplicitamente restituite, sono eliminate con il termine della funzione (località delle variabili) DEI - Univ. Padova (Italia) Un piccolo esempio: funzione # Script che definisce una funzione # per calcolare il perimetro e l'area # di un rettangolo, dati i suoi lati def rett(base, altezza): per=2*base+2*altezza area=base*altezza res=[per,area] return res side1=input('Inserisci la lunghezza della base: ') side2=input("Inserisci la lunghezza dell'altezza: ") res=rett(side1,side2) print "Il perimetro e': ", res[0] print "L'area e': ", res[1] DEI - Univ. Padova (Italia) Definizione di una funzione • L’istruzione def comunica all’interprete che l’istruzione che segue inizializza la definizione di una funzione, e che il blocco di istruzioni seguente sono parte della funzione. def rett(in1, in2, ...): • Seguono poi le istruzioni: sono istruzioni della funzione tutte quelle indentate. • Esse possono agire solo su – variabili create all’interno della funzione – parametri di ingresso in1, in2, … • In uscita viene resa disponibile solo la variabile restituita con return DEI - Univ. Padova (Italia) Funzioni esempio: I commenti cominciano con # E’ parte di codice che non viene interpretato come # Script che definisce una funzione # per calcolare il perimetro e l'area istrizioni, e non è eseguito # di un rettangolo, dati i suoi lati Argomenti di ingresso alla funzione. Sono gli unici dati presenti all’esterno del codice della def rett(base, altezza): funzione utilizzabili e conosciuti anche all’interno per=2*base+2*altezza area=base*altezza Nome identificativo della funzione res=[per,area] return res Indica che si sta definendo una funzione DEI - Univ. Padova (Italia) Indica la fine della funzione Valori di uscita della funzione. Sono le uniche variabili definite all’interno della funzione che saranno disponibili una volta terminata la funzione Località delle variabili 1 a=10 b=15 e=25 def prova(a): print “Nella b=100+a d=2*a print “Nella print “Nella print “Nella return b+10 c=prova(a) print “Fuori print “Fuori print “Fuori print “Fuori DEI - Univ. Padova (Italia) funzione prova a = “, a funzione prova b = “, b funzione prova d = “, d funzione prova e = “, e dalla dalla dalla dalla funzione funzione funzione funzione prova prova prova prova a b d e = = = = “, “, “, “, a b d e Località delle variabili 2 Nella Nella Nella Nella Fuori Fuori Fuori funzione prova funzione prova funzione prova funzione prova dalla funzione dalla funzione dalla funzione a = 10 b = 110 d = 20 e = 25 prova a = prova b = prova d = 10 15 Traceback (most recent call last): File "C:/Programmi/Python25/prova", line 17, in <module> print "Nella funzione prova d = ", d NameError: name 'd' is not defined DEI - Univ. Padova (Italia) Località delle variabili 3 Variabli globali: disponibili a tutte le funzioni a=10 b=15 e=25 def prova(a): print “Nella b=100+a d=2*a print “Nella print “Nella print “Nella return b+10 c=prova(a) print “Fuori print “Fuori print “Fuori print “Fuori DEI - Univ. Padova (Italia) Parametro della funzione: esso diventa una variabile locale. Il suo nome non ha nessuna relazione con eventuali altre variabili globali con lo stesso nome funzione prova a = “, a funzione prova b = “, b funzione prova d = “, d funzione prova e = “, e dalla dalla dalla dalla funzione funzione funzione funzione prova prova prova prova a b d e = = = = “, “, “, “, Variabli locali: compaiono a sinistra di una istruzione di assegnazione Variabile globale: è la stessa e che c’è all’esterno della funzione a b d e Utilizzare una funzione ATTENZIONE! Definire una funzione non vuol dire automaticamente eseguirla!! Una funzione indica che il blocco di istruzioni seguenti sono identificate da un nome, e che quelle istruzioni per poter funzionare hanno bisogno di un certo numero di variabili (argomenti della funzione). Le istruzioni della funzione sono eseguite solo quando si “richiama” la funzione, scrivendo il suo nome come una istruzione. DEI - Univ. Padova (Italia) Utilizzare una funzione a=10 def prova(var_in): … … return res c=prova(a) DEI - Univ. Padova (Italia) Definisco una funzione di nome “prova” che necessità di un parametro di ingresso. La funzione termina quando l’indentazione torna al livello del “def”. Chiedo all’interprete di eseguire la funzione “prova” che ho definito, dando al suo parametro di ingresso “var_in” il valore della variabile “a” File con più funzioni In un file .py ci possono essere un numero arbitrario di funzioni definite. Una funzione può essere utilizzata (eseguite) solo dopo che sia stata definita! def prova(var_in): res = var_in*var_in return res def stampanome(var_in): print “Ciao ”, var_in print prova(10) print stampanome(‘Andrea’) DEI - Univ. Padova (Italia) Utilizzare funzioni già scritte Una volta definite delle funzioni, è possibile utilizzarle nel workspace di Python oppure in uno script attraverso l’operazione di importazione Questa operazione rende la definizione delle funzioni importate disponibili. DEI - Univ. Padova (Italia) Importazione: modo 1 Come per il modulo matematico di Python, posso decidere di aver bisogno di tutte le funzioni definite in tale modulo, e di volerle tenere separate da eventuali altre funzioni. >>>import math In tale modo ogni oggetto (variabile o funzione) definita all’interno del modulo math, può essere utilizzato: >>> print math.sin(0.5) >>> print math.pi E’ necessario dire esplicitamente all’interprete che le variabili e le funzioni richieste sono all’interno del modulo math tramite l’operatore “.” DEI - Univ. Padova (Italia) Importazione: modo 1 Se definisco una funzione od una variabile con lo stesso nome di una appartenente al modulo math, esse sono in effetti oggetti distinti. Le variabili e funzioni del modulo math sono protetti dalla scatola del modulo: >>> pi=3.14 >>> import math >>> print pi 3.14 >>> print math.pi 3.1415926535897931 >>> DEI - Univ. Padova (Italia) Importazione: modo 1 Spazio di lavoro File test.py >>> import test >>> b=test.prova(10) >>> print b 100 def prova(var_in): res = var_in*var_in return res def stampanome(var_in): print “Ciao ”, var_in DEI - Univ. Padova (Italia) Importazione: modo 2 E’ possibile importare specifiche funzioni o variabili da un modulo, per poi utilizzarle senza dover indicare l’appartenenza ad un modulo. >>>from math import pi >>>from math import sin In tale modo ogni oggetto importato puà essere utilizzato semplicemente richiamando il suo nome: >>> sin(0.5) 0.47942553860420301 >>> pi 3.1415926535897931 DEI - Univ. Padova (Italia) Importazione: modo 2 Se definisco una funzione od una variabile con lo stesso nome di una importata, sovrascrivo il suo valore. >>> from math import pi >>> print math.pi 3.1415926535897931 >>> pi=5 >>> pi 5 DEI - Univ. Padova (Italia) Importazione: modo 1 Spazio di lavoro File test.py >>> from test import prova >>> b=prova(10) >>> print b 100 def prova(var_in): res = var_in*var_in return res def stampanome(var_in): print “Ciao ”, var_in DEI - Univ. Padova (Italia) Fattoriale in Python File num.py def fattoriale(n): if(n<0): print "Il fattoriale di un numero negativo non e' definito" return -1 res=1 for i in range(1,n+1): res=res*i return res Spazio di lavoro >>> from num import fattoriale >>> fattoriale(4) 24 DEI - Univ. Padova (Italia) Fibonacci in Python File num.py # Funzione iterativa per il calcolo dei numeri di fibonacci def fibonacci(n): if(n<0): print "Il numero di Fibonacci di un numero negativo non e' definito" return -1 if(n<2): return n fib1=0 fib2=1 for i in range(2,n): fib=fib1+fib2 fib1=fib2 fib2=fib fib=fib1+fib2 return fib DEI - Univ. Padova (Italia) Fibonacci in Python File num.py # Funzione iterativa per il calcolo del fattoriale def fattoriale(n): … return res # Funzione iterativa per il calcolo dei numeri di fibonacci def fibonacci(n): if(n<0): print "Il numero di Fibonacci di un numero negativo non e' definito" return -1 if(n<2): return n fib1=0 fib2=1 for i in range(2,n): fib=fib1+fib2 fib1=fib2 fib2=fib fib=fib1+fib2 return fib DEI - Univ. Padova (Italia) Fibonacci in Python Spazio di lavoro >>> from num import fibonacci >>> for i in range(10) print fibonacci(i) 0 1 1 2 3 5 8 13 21 34 >>> DEI - Univ. Padova (Italia)