Differenze tra le versioni di "Python Lezione 11 Giugno 2008"
Riga 25: | Riga 25: | ||
che ha come effetto quello del programma ''yes'' dei sistemi *nix, ovvero stampa 'y' finchè non viene interrotto | che ha come effetto quello del programma ''yes'' dei sistemi *nix, ovvero stampa 'y' finchè non viene interrotto | ||
− | == | + | == Le funzioni == |
quando noi abbiamo fatto il [[http://golem.linux.it/index.php/Lezione_4_Giugno#ESEMPIO_DELLA_SERATA: programma per calcolare le potenze]], abbiamo scritto diverse righe di codice. | quando noi abbiamo fatto il [[http://golem.linux.it/index.php/Lezione_4_Giugno#ESEMPIO_DELLA_SERATA: programma per calcolare le potenze]], abbiamo scritto diverse righe di codice. | ||
Riga 46: | Riga 46: | ||
quindi il nostro programma diviene | quindi il nostro programma diviene | ||
+ | |||
+ | def potenza(base, esponente): | ||
+ | result=1 | ||
+ | for i in xrange(esponente): | ||
+ | result = result * base | ||
+ | return result | ||
+ | base= raw_input (“inserisce la base:”) | ||
+ | esponente=raw_input ('inserisci l\' esponente') | ||
+ | base=int(base) | ||
+ | result=int(result) | ||
− | + | print potenza(base, esponente) | |
− | potenza ( | ||
− | |||
− | se | + | Vediamo come, se si omette anche uno o entrambi i parametri, viene generata una eccezione di tipo TypeError: |
− | |||
− | + | >>> potenza() | |
− | def potenza ( | + | Traceback (most recent call last): |
− | + | File "<stdin>", line 1, in <module> | |
− | + | TypeError: potenza() takes exactly 2 arguments (0 given) | |
− | + | ||
− | + | >>> potenza(2) | |
+ | Traceback (most recent call last): | ||
+ | File "<stdin>", line 1, in <module> | ||
+ | TypeError: potenza() takes exactly 2 arguments (1 given) | ||
+ | |||
+ | >>> potenza (2,8) | ||
+ | 256 | ||
+ | >>> | ||
+ | |||
+ | Se si desiderasse avere il comportamento del tipo "se manca uno dei due parametri allora si intende che la base è 2 e il parametro presente è l'esponente", | ||
+ | potrei usare i paramatri di default: | ||
+ | |||
+ | def potenza(esponente, base=2): | ||
+ | result=1 | ||
+ | for i in xrange(esponente): | ||
+ | result = result * base | ||
+ | return result | ||
+ | |||
+ | quindi a questo punto | ||
+ | >>> potenza(8) | ||
+ | 256 | ||
+ | >>> | ||
+ | |||
+ | Da notare come i parametri di default devono necessariamente stare '''dopo''' i parametri che non hanno il valore di default. | ||
+ | |||
+ | Potrei anche mettere entrambi i paramentri di default | ||
+ | |||
+ | def potenza(base=2, esponente=1): | ||
+ | result=1 | ||
+ | for i in xrange(esponente): | ||
+ | result = result * base | ||
+ | return result | ||
− | + | In questo caso la chiamata | |
− | + | >>> potenza() | |
− | + | 2 | |
− | + | non genera l'eccezione perchè, avendo specificato per entrambi un valore di default l'interprete esegue 2**1 = 2 | |
− | + | Quando effettuo chiamate di funzione posso usare la keyword per rendere più chiaro il mio programma: | |
− | |||
− | |||
− | |||
− | + | >>> potenza(base=2, esponente=8) | |
− | potenza(8 | + | 256 |
− | |||
− | + | In questo modo non mi devo ricordare l'ordine in cui sono stati definiti i parametri, e, rileggendo dopo mesi o anni il pezzo di codice, questo sarà sicuramente più chiaro. | |
+ | Certe volte, per certi moduli, l'utilizzo delle keyword è indispensabile. | ||
== IMPORTARE UN FILE == | == IMPORTARE UN FILE == |
Versione delle 18:40, 13 giu 2008
QUESTI APPUNTI SONO UNA BOZZA IN ATTESA DI CORREZIONE E, PER QUESTO, NON ATTENDIBILI.
while
Simile al for, si usa per effettuare un ciclo di cui non sappiamo la lunghezza esatta, ovvero si cicla finché la condizione specificata non risulta vera. Torna utile quando vogliamo fare cicli infiniti, che con il for non possiamo fare in maniera "pulita" Può essere usato (a discapito della chiarezza) come un ciclo for: ad esempio, se volessimo ciclare 10 volte possiamo scrivere
a = 0 while a < 10: print a a = a + 1
che è del tutto equivalente a
for a in xrange(10): print a
Altrimenti, per ciclare all'infinito
while True: print "y"
che ha come effetto quello del programma yes dei sistemi *nix, ovvero stampa 'y' finchè non viene interrotto
Le funzioni
quando noi abbiamo fatto il [programma per calcolare le potenze], abbiamo scritto diverse righe di codice. Alcune di queste erano per recuperare e controllare l'input dell'utente, altre proprio per calcolare la potenza del numero. Se nel corso del nostro programma ci servisse ripetere il calcolo della potenza base**esponente (facendo finta che non ci sia l'operatore ** che fa esattamente quello che vogliamo) potremmo semplicemente fare copia-incolla di quelle righe ogni volta che ci servono. Poi ci accorgiamo che c'è un errore, che abbiamo quindi ripetuto n volte. E dobbiamo correggere n volte. Se avessimo creato una funzione, invece, ci sarebbe una sola definizione e n chiamate: una volta trovato l'errore basta correggerlo una volta sola.
La funzione di definisce usando def. Per crere una funzione dobbiamo scrivere: def -il nome della funzione- (-variabile1-,-variabile2-) : es.
def potenza (base,esponente): result = 1 for i in xrange(esponente): result=result*base return result
return "ritorna" al chiamante il contenuto della variabile result.
quindi il nostro programma diviene
def potenza(base, esponente): result=1 for i in xrange(esponente): result = result * base return result
base= raw_input (“inserisce la base:”) esponente=raw_input ('inserisci l\' esponente')
base=int(base) result=int(result)
print potenza(base, esponente)
Vediamo come, se si omette anche uno o entrambi i parametri, viene generata una eccezione di tipo TypeError:
>>> potenza() Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: potenza() takes exactly 2 arguments (0 given)
>>> potenza(2) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: potenza() takes exactly 2 arguments (1 given)
>>> potenza (2,8) 256 >>>
Se si desiderasse avere il comportamento del tipo "se manca uno dei due parametri allora si intende che la base è 2 e il parametro presente è l'esponente", potrei usare i paramatri di default:
def potenza(esponente, base=2): result=1 for i in xrange(esponente): result = result * base return result
quindi a questo punto
>>> potenza(8) 256 >>>
Da notare come i parametri di default devono necessariamente stare dopo i parametri che non hanno il valore di default.
Potrei anche mettere entrambi i paramentri di default
def potenza(base=2, esponente=1): result=1 for i in xrange(esponente): result = result * base return result
In questo caso la chiamata
>>> potenza() 2
non genera l'eccezione perchè, avendo specificato per entrambi un valore di default l'interprete esegue 2**1 = 2
Quando effettuo chiamate di funzione posso usare la keyword per rendere più chiaro il mio programma:
>>> potenza(base=2, esponente=8) 256
In questo modo non mi devo ricordare l'ordine in cui sono stati definiti i parametri, e, rileggendo dopo mesi o anni il pezzo di codice, questo sarà sicuramente più chiaro. Certe volte, per certi moduli, l'utilizzo delle keyword è indispensabile.
IMPORTARE UN FILE
ammetto che qui mi sono persa.
tutto è nato dalla domanda di raffaele:Quando creiamo il file, ecc....le variabili che validità hanno?
abbiamo parlato del main, che non viene esguito se il file viene importato. Abbiamo fatto degli esempi che io non ho avuto il tempo di copiare.
Abbiamo anche parlato di dove il sistema va a cercare un file, del path, ecc... Abbiamo fatto un esempio con un file chiamato python.tmp.py, abbiamo detto come fare ad importarlo e abbiamo fatto un esempio pratico che ci faceva capire che, poichè il file era importato, non esguiva il main.Purtroppo mi sono persa l'esempio.
MODULI GANZI
abbiamo parlato di alcuni moduli con cui fare cose carine, mi sono persa la maggior parte degli esempi, ma metterò l'elenco dei moduli: os walk mkdir
SOTTODIRECTORY
qui ero in stato comatoso.Mi sono veramente eclissata.
ESERCIZIO DELLA SERATA
Funzione che rivolta le stringhe. abbiamo fatto vari tentativi ma poi ci siamo accorti che esiste la funzione reversed
- mi sono persa la parte prima*
reversed(a) for elem in reversed(a): print elem