18 maggio 2010

Firefox su Lucid Lynx, Semplicemente inusabile

Ci risiamo. Anche su Lucid Lynx riscopro un vecchio alquanto antipatico bug, già incontrato nei primi tempi di Karmic Koala, che rende la navigazione un vero sconforto.

Come la chiamereste voi la user experience(crash) che Firefox per Linux nella versione 3.6.3 mi riserva ogni tot di link cliccati ?

Per fortuna almeno sino a quando il bug non sarà sistemato Crome rende la mia navigazione(almeno per ora) nel web con Lucid Lynx, molto più veloce e reattiva. Tra le altre cose ho scoperto che fare sviluppo web con Crome è molto più veloce e piacevole per via della sua apertura delle finestre in processi separati.

Mi auguro che per il futuro, alla Mozilla prendano la versione per Gnu/Linux un po più in seria considerazione, o perlomeno alla pari della versione Windows.

15 maggio 2010

PYTHON generators and iterators

Fondamentalmente gli iteratori sono degli oggetti della funzione iter(X), che definiscono il metodo __next__(), restituendo un elemento successivo fino a che non ci sono più elementi da iterare, e termina con l' eccezzione StopIteration.


>>> def soldato(spara=1): #crea una funzione con un argomento
... while True: #finchè il ciclo e vero
... yield spara*spara #yield restituisce un valore expression da usarsi su una sola riga
... spara += 1 #spara = spara + 1
...
>>> pallottole = soldato(5) #assegna le pallottole al soldato
>>> pallottole #in assenza delle parentesi mostra che pallottole è un oggetto generators

>>> pallottole.next()
25
>>> pallottole.next()
36
>>> pallottole.next()
49
>>> pallottole.next()
64
>>> pallottole.next()
81
>>> pallottole.next()
100
>>> nuove_pallottole = soldato(10) #assegnamento nuove pallottole
>>> nuove_pallottole.next()
100
>>> nuove_pallottole.next()
121
>>> nuove_pallottole.next()
196
>>> spara_tutte_le_pallottole = [pallottole.next(), nuove_pallottole.next()] #lista di pallottole
>>> spara_tutte_le_pallottole #esplode tutte le pallottole
[144, 225]
>>>

un esempio che rende molto più chiaro il modo di lavorare gli iteratori

>>> import os #importo il modulo os per aprire il file dal suo path
>>> file = open(r'C:\test\spari_a_vuoto.txt') #apro il file
>>> file.next()
'primo sparo\n'
>>> file.next()
'secondo sparo\n'
>>> file.next()
'terzo sparo\n'
>>> file.next()
'quarto sparo\n'
>>> file.next()
'quinto sparo\n'
>>> file.next()
'sesto sparo\n'
>>> file.next()
'settimo sparo\n'
>>> file.next()
'ottavo sparo\n'
>>> file.next()
'nono sparo\n'
>>> file.next()
'decimo sparo\n'
>>> file.next() #tanto per ricordarvi che quando non ci sono più elementi..
'inceppatura..'
>>> file.next() #arriva l'eccezzione StopIteration!
Traceback (most recent call last):
File "", line 1, in
StopIteration
>>>

per approfondire non resta che leggere la ralativa documentazione.

14 maggio 2010

Il Modulo os, la Funzione walk(), e L'albero Delle Directory

Attraversare l' albero delle directory con la funzione walk() del modulo os.

>>> import os
>>> global_path = (r'C:\test') #creo una variabile globale per la directory da percorrere
>>>
>>> def explode_dir(show_dir):
... return show_dir[0] + "[OK]" #[0] si riferisce sempre alla prima directory del path
...
>>> path_dir = os.walk(global_path) #crea una tupla di tre argomenti
>>> for extract in path_dir:
... explode_dir(extract) # percorre tutto l' albero della directory, stampandone la struttura
...
'C:\\test[OK]'
'C:\\test\\Beginning_Python[OK]'
'C:\\test\\Beginning_Python\\Chapter10[OK]'
'C:\\test\\Beginning_Python\\Chapter11[OK]'
'C:\\test\\Beginning_Python\\Chapter12[OK]'
'C:\\test\\Beginning_Python\\Chapter13[OK]'
'C:\\test\\Beginning_Python\\Chapter13\\exercises[OK]'
'C:\\test\\Beginning_Python\\Chapter13\\tryitout[OK]'
'C:\\test\\Beginning_Python\\Chapter14[OK]'
'C:\\test\\Beginning_Python\\Chapter15[OK]'
'C:\\test\\Beginning_Python\\Chapter16[OK]'
'C:\\test\\Beginning_Python\\Chapter16\\exercises[OK]'
'C:\\test\\Beginning_Python\\Chapter16\\listings[OK]'
'C:\\test\\Beginning_Python\\Chapter16\\tryitout[OK]'
'C:\\test\\Beginning_Python\\Chapter17[OK]'
'C:\\test\\Beginning_Python\\Chapter17\\pylame[OK]'
'C:\\test\\Beginning_Python\\Chapter19[OK]'
'C:\\test\\Beginning_Python\\Chapter21[OK]'
'C:\\test\\Beginning_Python\\Chapter21\\exercises[OK]'
'C:\\test\\Beginning_Python\\Chapter21\\listings[OK]'
'C:\\test\\Beginning_Python\\Chapter21\\listings\\cgi-bin[OK]'
'C:\\test\\Beginning_Python\\Chapter21\\tryitout[OK]'
'C:\\test\\Beginning_Python\\Chapter5[OK]'
'C:\\test\\Beginning_Python\\Chapter6[OK]'
'C:\\test\\Beginning_Python\\Chapter7[OK]'
'C:\\test\\Beginning_Python\\Chapter7\\Kitchen[OK]'
'C:\\test\\Beginning_Python\\Chapter8[OK]'
'C:\\test\\Beginning_Python\\Chapter9[OK]'
'C:\\test\\PP3E[OK]'
'C:\\test\\PP3E\\Ai[OK]'
'C:\\test\\PP3E\\Ai\\ExpertSystem[OK]'
'C:\\test\\PP3E\\Ai\\ExpertSystem\\holmes[OK]'
'C:\\test\\PP3E\\Ai\\ExpertSystem\\holmes\\examples[OK]'
'C:\\test\\PP3E\\Ai\\ExpertSystem\\holmes\\holmes[OK]'
'C:\\test\\PP3E\\Ai\\ExpertSystem\\holmes\\holmes2[OK]'
'C:\\test\\PP3E\\Ai\\ExpertSystem\\holmes\\holmes3[OK]'
'C:\\test\\PP3E\\Ai\\ExpertSystem\\holmes\\kbases[OK]'
'C:\\test\\PP3E\\Ai\\TicTacToe[OK]'
'C:\\test\\PP3E\\Database[OK]'
'C:\\test\\PP3E\\Database\\SQLscripts[OK]'
'C:\\test\\PP3E\\Database\\ZODBscripts[OK]'
'C:\\test\\PP3E\\Dbase[OK]'
'C:\\test\\PP3E\\Dbase\\TableBrowser[OK]'
'C:\\test\\PP3E\\Dstruct[OK]'
'C:\\test\\PP3E\\Dstruct\\Basic[OK]'
'C:\\test\\PP3E\\Dstruct\\Classics[OK]'
'C:\\test\\PP3E\\Dstruct\\Classics\\MoreGraphs[OK]'
'C:\\test\\PP3E\\Dstruct\\OldIntro[OK]'
'C:\\test\\PP3E\\Dstruct\\TreeView[OK]'
'C:\\test\\PP3E\\Dstruct\\TreeView\\alts[OK]'
'C:\\test\\PP3E\\extras[OK]'
'C:\\test\\PP3E\\extras\\Assorted[OK]'
'C:\\test\\PP3E\\extras\\BnrNov06[OK]'
'C:\\test\\PP3E\\extras\\BnrNov06\\Bigfile[OK]'
'C:\\test\\PP3E\\extras\\BnrNov06\\PersonDB[OK]'
'C:\\test\\PP3E\\extras\\BnrNov06\\Sumit[OK]'
'C:\\test\\PP3E\\extras\\BnrNov06\\Tester[OK]'
'C:\\test\\PP3E\\extras\\BnrNov06\\Tester\\Outputs[OK]'
'C:\\test\\PP3E\\extras\\BnrNov06\\Tester\\Scripts[OK]'
'C:\\test\\PP3E\\extras\\EPNov06[OK]'
'C:\\test\\PP3E\\extras\\FermAdvancedClass[OK]'
'C:\\test\\PP3E\\extras\\FermAdvancedClass\\tester[OK]'
'C:\\test\\PP3E\\extras\\FermAdvancedClass\\tester\\args[OK]'
'C:\\test\\PP3E\\extras\\FermAdvancedClass\\tester\\inputs[OK]'
'C:\\test\\PP3E\\extras\\FermAdvancedClass\\tester\\outputs[OK]'
'C:\\test\\PP3E\\extras\\FermAdvancedClass\\tester\\tests[OK]'
'C:\\test\\PP3E\\extras\\GetcoEmployeeProject[OK]'
'C:\\test\\PP3E\\extras\\GetcoEmployeeProject\\cgi-bin[OK]'
'C:\\test\\PP3E\\extras\\LosAlamosAdvancedClass[OK]'
'C:\\test\\PP3E\\extras\\LosAlamosAdvancedClass\\day1-system[OK]'
'C:\\test\\PP3E\\extras\\LosAlamosAdvancedClass\\day2-gui-dbase[OK]'
'C:\\test\\PP3E\\extras\\LosAlamosAdvancedClass\\day2-gui-dbase\\sql[OK]'
'C:\\test\\PP3E\\extras\\LosAlamosAdvancedClass\\day2-gui-dbase\\zodb[OK]'
'C:\\test\\PP3E\\extras\\LosAlamosAdvancedClass\\day3-internet-text[OK]'
'C:\\test\\PP3E\\extras\\LosAlamosAdvancedClass\\day3-internet-text\\website[OK]'
'C:\\test\\PP3E\\extras\\LosAlamosAdvancedClass\\day3-internet-text\\website\\cgi-bin[OK]'
'C:\\test\\PP3E\\extras\\LosAlamosAdvancedClass\\day4-integrate-project[OK]'
'C:\\test\\PP3E\\extras\\LosAlamosAdvancedClass\\day4-integrate-project\\Integrate-PP3E[OK]'
'C:\\test\\PP3E\\extras\\LosAlamosAdvancedClass\\day4-integrate-project\\Project-dbase-gui[OK]'
'C:\\test\\PP3E\\extras\\QualcommAdvClass[OK]'
'C:\\test\\PP3E\\extras\\QualcommAdvClass\\BigPy[OK]'
'C:\\test\\PP3E\\extras\\QualcommAdvClass\\Dbase[OK]'
'C:\\test\\PP3E\\extras\\QualcommAdvClass\\Forms[OK]'
'C:\\test\\PP3E\\extras\\QualcommAdvClass\\Gui1[OK]'
'C:\\test\\PP3E\\extras\\QualcommAdvClass\\Integrate[OK]'
'C:\\test\\PP3E\\extras\\QualcommAdvClass\\Internet[OK]'
'C:\\test\\PP3E\\extras\\QualcommAdvClass\\Internet\\website[OK]'
'C:\\test\\PP3E\\extras\\QualcommAdvClass\\Internet\\website\\cgi-bin[OK]'
'C:\\test\\PP3E\\extras\\QualcommAdvClass\\Tester[OK]'
'C:\\test\\PP3E\\extras\\QualcommAdvClass\\Tester\\outputs[OK]'
'C:\\test\\PP3E\\extras\\QualcommAdvClass\\Tester\\scripts[OK]'
'C:\\test\\PP3E\\extras\\QualcommAdvClass\\Text[OK]'
'C:\\test\\PP3E\\extras\\QualcommAdvClass\\Timer[OK]'
'C:\\test\\PP3E\\extras\\SeagateOct06[OK]'
'C:\\test\\PP3E\\Gui[OK]'
'C:\\test\\PP3E\\Gui\\Clock[OK]'
'C:\\test\\PP3E\\Gui\\gifs[OK]'
'C:\\test\\PP3E\\Gui\\Intro[OK]'
'C:\\test\\PP3E\\Gui\\MovingPics[OK]'
'C:\\test\\PP3E\\Gui\\PIL[OK]'
'C:\\test\\PP3E\\Gui\\PIL\\images[OK]'
'C:\\test\\PP3E\\Gui\\PIL\\images\\thumbs[OK]'
'C:\\test\\PP3E\\Gui\\ShellGui[OK]'
'C:\\test\\PP3E\\Gui\\ShellGui\\test[OK]'
'C:\\test\\PP3E\\Gui\\SlideShow[OK]'
'C:\\test\\PP3E\\Gui\\TextEditor[OK]'
'C:\\test\\PP3E\\Gui\\Tools[OK]'
'C:\\test\\PP3E\\Gui\\Tools\\BigGui[OK]'
'C:\\test\\PP3E\\Gui\\Tools\\Reload[OK]'
'C:\\test\\PP3E\\Gui\\Tour[OK]'
'C:\\test\\PP3E\\Integrate[OK]'
'C:\\test\\PP3E\\Integrate\\Embed[OK]'
'C:\\test\\PP3E\\Integrate\\Embed\\ApiClients[OK]'
'C:\\test\\PP3E\\Integrate\\Embed\\Basics[OK]'
'C:\\test\\PP3E\\Integrate\\Embed\\Basics\\Old[OK]'
'C:\\test\\PP3E\\Integrate\\Embed\\Basics\\pp2e[OK]'
'C:\\test\\PP3E\\Integrate\\Embed\\HighLevelApi[OK]'
'C:\\test\\PP3E\\Integrate\\Embed\\Inventory[OK]'
'C:\\test\\PP3E\\Integrate\\Embed\\Inventory\\Output[OK]'
'C:\\test\\PP3E\\Integrate\\Embed\\Inventory\\WithDbase[OK]'
'C:\\test\\PP3E\\Integrate\\Embed\\Inventory\\WithDbase\\Data[OK]'
'C:\\test\\PP3E\\Integrate\\Embed\\Inventory\\WithDbase\\Dbase[OK]'
'C:\\test\\PP3E\\Integrate\\Embed\\Inventory\\WithDbase\\Output[OK]'
'C:\\test\\PP3E\\Integrate\\Embed\\TestApi[OK]'
'C:\\test\\PP3E\\Integrate\\Embed\\TestApi\\WithPackages[OK]'
'C:\\test\\PP3E\\Integrate\\Embed\\TestApi\\WithPackages\\pkgdir[OK]'
'C:\\test\\PP3E\\Integrate\\Extend[OK]'
'C:\\test\\PP3E\\Integrate\\Extend\\Cenviron[OK]'
'C:\\test\\PP3E\\Integrate\\Extend\\Cenviron\\Old[OK]'
'C:\\test\\PP3E\\Integrate\\Extend\\Cenviron\\pp2e[OK]'
'C:\\test\\PP3E\\Integrate\\Extend\\Hello[OK]'
'C:\\test\\PP3E\\Integrate\\Extend\\HelloLib[OK]'
'C:\\test\\PP3E\\Integrate\\Extend\\HelloLib\\pp2e[OK]'
'C:\\test\\PP3E\\Integrate\\Extend\\Modulator[OK]'
'C:\\test\\PP3E\\Integrate\\Extend\\Stacks[OK]'
'C:\\test\\PP3E\\Integrate\\Extend\\Stacks\\pp2e[OK]'
'C:\\test\\PP3E\\Integrate\\Extend\\Swig[OK]'
'C:\\test\\PP3E\\Integrate\\Extend\\Swig\\Environ[OK]'
'C:\\test\\PP3E\\Integrate\\Extend\\Swig\\Environ\\pp2e[OK]'
'C:\\test\\PP3E\\Integrate\\Extend\\Swig\\pp2e[OK]'
'C:\\test\\PP3E\\Integrate\\Extend\\Swig\\Shadow[OK]'
'C:\\test\\PP3E\\Integrate\\Extend\\Swig\\Shadow\\pp2e[OK]'
'C:\\test\\PP3E\\Integrate\\Extend\\Swig\\swig.org.docs[OK]'
'C:\\test\\PP3E\\Integrate\\Extend\\Swig\\swig.org.docs\\SWIG and Python_files[OK]'
'C:\\test\\PP3E\\Integrate\\Mixed[OK]'
'C:\\test\\PP3E\\Integrate\\Mixed\\Exports[OK]'
'C:\\test\\PP3E\\Integrate\\Mixed\\Exports\\ClassAndMod[OK]'
'C:\\test\\PP3E\\Integrate\\Mixed\\Regist[OK]'
'C:\\test\\PP3E\\Internet[OK]'
'C:\\test\\PP3E\\Internet\\Email[OK]'
'C:\\test\\PP3E\\Internet\\Email\\mailtools[OK]'
'C:\\test\\PP3E\\Internet\\Email\\PyMailGui[OK]'
'C:\\test\\PP3E\\Internet\\Email\\PyMailGui\\etc[OK]'
'C:\\test\\PP3E\\Internet\\Email\\PyMailGui\\SavedMail[OK]'
'C:\\test\\PP3E\\Internet\\Email\\PyMailGui\\SavedParts[OK]'
'C:\\test\\PP3E\\Internet\\Email\\PyMailGui\\TempParts[OK]'
'C:\\test\\PP3E\\Internet\\Ftp[OK]'
'C:\\test\\PP3E\\Internet\\Ftp\\defunct[OK]'
'C:\\test\\PP3E\\Internet\\Ftp\\mirror[OK]'
'C:\\test\\PP3E\\Internet\\Other[OK]'
'C:\\test\\PP3E\\Internet\\Other\\Grail[OK]'
'C:\\test\\PP3E\\Internet\\Other\\HTMLgen[OK]'
'C:\\test\\PP3E\\Internet\\Other\\Jython[OK]'
'C:\\test\\PP3E\\Internet\\Other\\PSP[OK]'
'C:\\test\\PP3E\\Internet\\Other\\Win[OK]'
'C:\\test\\PP3E\\Internet\\Other\\XML[OK]'
'C:\\test\\PP3E\\Internet\\Other\\Zope[OK]'
'C:\\test\\PP3E\\Internet\\Sockets[OK]'
'C:\\test\\PP3E\\Internet\\Web[OK]'
'C:\\test\\PP3E\\Internet\\Web\\cgi-bin[OK]'
'C:\\test\\PP3E\\Internet\\Web\\dev[OK]'
'C:\\test\\PP3E\\Internet\\Web\\dev\\PyMailCGI_2.1[OK]'
'C:\\test\\PP3E\\Internet\\Web\\dev\\PyMailCGI_2.1\\cgi-bin[OK]'
'C:\\test\\PP3E\\Internet\\Web\\PyErrata[OK]'
'C:\\test\\PP3E\\Internet\\Web\\PyErrata\\AdminTools[OK]'
'C:\\test\\PP3E\\Internet\\Web\\PyErrata\\AdminTools\\DbaseFilesIndexed[OK]'
'C:\\test\\PP3E\\Internet\\Web\\PyErrata\\AdminTools\\DbaseFilesIndexed\\commentDB[OK]'
'C:\\test\\PP3E\\Internet\\Web\\PyErrata\\AdminTools\\DbaseFilesIndexed\\errataDB[OK]'
'C:\\test\\PP3E\\Internet\\Web\\PyErrata\\AdminTools\\temp[OK]'
'C:\\test\\PP3E\\Internet\\Web\\PyErrata\\Chapter[OK]'
'C:\\test\\PP3E\\Internet\\Web\\PyErrata\\DbaseFiles[OK]'
'C:\\test\\PP3E\\Internet\\Web\\PyErrata\\DbaseFiles\\commentDB[OK]'
'C:\\test\\PP3E\\Internet\\Web\\PyErrata\\DbaseFiles\\errataDB[OK]'
'C:\\test\\PP3E\\Internet\\Web\\PyErrata\\DbaseShelve[OK]'
'C:\\test\\PP3E\\Internet\\Web\\PyErrata\\Mutex[OK]'
'C:\\test\\PP3E\\Internet\\Web\\PyMailCgi[OK]'
'C:\\test\\PP3E\\Internet\\Web\\PyMailCgi\\cgi-bin[OK]'
'C:\\test\\PP3E\\Internet\\Web\\PyMailCgi\\partsdownload[OK]'
'C:\\test\\PP3E\\Internet\\Web\\PyMailCgi\\partsupload[OK]'
'C:\\test\\PP3E\\Internet\\Web\\uploads[OK]'
'C:\\test\\PP3E\\Lang[OK]'
'C:\\test\\PP3E\\Lang\\Calculator[OK]'
'C:\\test\\PP3E\\Lang\\Parser[OK]'
'C:\\test\\PP3E\\Preview[OK]'
'C:\\test\\PP3E\\Preview\\cgi-bin[OK]'
'C:\\test\\PP3E\\PyTools[OK]'
'C:\\test\\PP3E\\System[OK]'
'C:\\test\\PP3E\\System\\App[OK]'
'C:\\test\\PP3E\\System\\App\\Bases[OK]'
'C:\\test\\PP3E\\System\\App\\Clients[OK]'
'C:\\test\\PP3E\\System\\App\\Clients\\test[OK]'
'C:\\test\\PP3E\\System\\App\\Clients\\test\\unpack[OK]'
'C:\\test\\PP3E\\System\\App\\Clients\\test\\unpackapp[OK]'
'C:\\test\\PP3E\\System\\App\\Kinds[OK]'
'C:\\test\\PP3E\\System\\App\\Tests[OK]'
'C:\\test\\PP3E\\System\\Environment[OK]'
'C:\\test\\PP3E\\System\\Exits[OK]'
'C:\\test\\PP3E\\System\\Filetools[OK]'
'C:\\test\\PP3E\\System\\Media[OK]'
'C:\\test\\PP3E\\System\\Processes[OK]'
'C:\\test\\PP3E\\System\\Streams[OK]'
'C:\\test\\PP3E\\System\\Threads[OK]'
'C:\\test\\PP3E\\TempParts[OK]'
'C:\\test\\tooltip[OK]'
'C:\\test\\tooltip\\images[OK]'
'C:\\test\\vari[OK]'
'C:\\test\\vari\\PP3E-Examples-1.2[OK]'
>>>

un altro semplice esempio:

mettiamo il caso che volessimo trovare una particolare estensione di file, in una alberatura di directory a noi giа nota, sempre tramite il nostro fidato modulo os, e la funzione find() e walk(). Non resta che importare il modulo os, e creare una funzione con tre argomenti, i quali saranno: il tipo di estensione .pyw che nel caso specifico(win32), serve a non eseguire il prompt dei comandi in contemporanea con il programma python. Le directory, e i nomi dei files.pyw che ricercheremo.

Assegnare una variabile, da poter iterare tramite un ciclo if, dove con la funzione find() viene ricercato il file. La "magia",se cosi possiamo definirla, sta tutta nella chiamata alla funzione, os.path.walk() che esegue una tupla di tre elementi che richiamano il percorso delle directory(path), la funzione stessa(search_function), e la lista dei nomi di files con l' estensione da noi ricercata(pyw).


>>> import os
>>> def search_function(pyw, dir, files):
... file_extension = 'pyw'
... if file_extension == 1:
... os.find(file_extension)
... print dir, file_extension
...
>>> os.path.walk(r'C:\test\PP3E', search_function, '.pyw')
C:\test\PP3E pyw
C:\test\PP3E\Ai pyw
C:\test\PP3E\Ai\ExpertSystem pyw
C:\test\PP3E\Ai\ExpertSystem\holmes pyw
C:\test\PP3E\Ai\ExpertSystem\holmes\examples pyw
C:\test\PP3E\Ai\ExpertSystem\holmes\holmes pyw
C:\test\PP3E\Ai\ExpertSystem\holmes\holmes2 pyw
C:\test\PP3E\Ai\ExpertSystem\holmes\holmes3 pyw
C:\test\PP3E\Ai\ExpertSystem\holmes\kbases pyw
C:\test\PP3E\Ai\TicTacToe pyw
C:\test\PP3E\Database pyw
C:\test\PP3E\Database\SQLscripts pyw
C:\test\PP3E\Database\ZODBscripts pyw
C:\test\PP3E\Dbase pyw
C:\test\PP3E\Dbase\TableBrowser pyw
C:\test\PP3E\Dstruct pyw
C:\test\PP3E\Dstruct\Basic pyw
C:\test\PP3E\Dstruct\Classics pyw
C:\test\PP3E\Dstruct\Classics\MoreGraphs pyw
C:\test\PP3E\Dstruct\OldIntro pyw
C:\test\PP3E\Dstruct\TreeView pyw
C:\test\PP3E\Dstruct\TreeView\alts pyw
C:\test\PP3E\extras pyw
C:\test\PP3E\extras\Assorted pyw
C:\test\PP3E\extras\BnrNov06 pyw
C:\test\PP3E\extras\BnrNov06\Bigfile pyw
C:\test\PP3E\extras\BnrNov06\PersonDB pyw
C:\test\PP3E\extras\BnrNov06\Sumit pyw
C:\test\PP3E\extras\BnrNov06\Tester pyw
C:\test\PP3E\extras\BnrNov06\Tester\Outputs pyw
C:\test\PP3E\extras\BnrNov06\Tester\Scripts pyw
C:\test\PP3E\extras\EPNov06 pyw
C:\test\PP3E\extras\FermAdvancedClass pyw
C:\test\PP3E\extras\FermAdvancedClass\tester pyw
C:\test\PP3E\extras\FermAdvancedClass\tester\args pyw
C:\test\PP3E\extras\FermAdvancedClass\tester\inputs pyw
C:\test\PP3E\extras\FermAdvancedClass\tester\outputs pyw
C:\test\PP3E\extras\FermAdvancedClass\tester\tests pyw
C:\test\PP3E\extras\GetcoEmployeeProject pyw
C:\test\PP3E\extras\GetcoEmployeeProject\cgi-bin pyw
C:\test\PP3E\extras\LosAlamosAdvancedClass pyw
C:\test\PP3E\extras\LosAlamosAdvancedClass\day1-system pyw
C:\test\PP3E\extras\LosAlamosAdvancedClass\day2-gui-dbase pyw
C:\test\PP3E\extras\LosAlamosAdvancedClass\day2-gui-dbase\sql pyw
C:\test\PP3E\extras\LosAlamosAdvancedClass\day2-gui-dbase\zodb pyw
C:\test\PP3E\extras\LosAlamosAdvancedClass\day3-internet-text pyw
C:\test\PP3E\extras\LosAlamosAdvancedClass\day3-internet-text\website pyw
C:\test\PP3E\extras\LosAlamosAdvancedClass\day3-internet-text\website\cgi-bin pyw
C:\test\PP3E\extras\LosAlamosAdvancedClass\day4-integrate-project pyw
C:\test\PP3E\extras\LosAlamosAdvancedClass\day4-integrate-project\Integrate-PP3E pyw
C:\test\PP3E\extras\LosAlamosAdvancedClass\day4-integrate-project\Project-dbase-gui pyw
C:\test\PP3E\extras\QualcommAdvClass pyw
C:\test\PP3E\extras\QualcommAdvClass\BigPy pyw
C:\test\PP3E\extras\QualcommAdvClass\Dbase pyw
C:\test\PP3E\extras\QualcommAdvClass\Forms pyw
C:\test\PP3E\extras\QualcommAdvClass\Gui1 pyw
C:\test\PP3E\extras\QualcommAdvClass\Integrate pyw
C:\test\PP3E\extras\QualcommAdvClass\Internet pyw
C:\test\PP3E\extras\QualcommAdvClass\Internet\website pyw
C:\test\PP3E\extras\QualcommAdvClass\Internet\website\cgi-bin pyw
C:\test\PP3E\extras\QualcommAdvClass\Tester pyw
C:\test\PP3E\extras\QualcommAdvClass\Tester\outputs pyw
C:\test\PP3E\extras\QualcommAdvClass\Tester\scripts pyw
C:\test\PP3E\extras\QualcommAdvClass\Text pyw
C:\test\PP3E\extras\QualcommAdvClass\Timer pyw
C:\test\PP3E\extras\SeagateOct06 pyw
C:\test\PP3E\Gui pyw
C:\test\PP3E\Gui\Clock pyw
C:\test\PP3E\Gui\gifs pyw
C:\test\PP3E\Gui\Intro pyw
C:\test\PP3E\Gui\MovingPics pyw
C:\test\PP3E\Gui\PIL pyw
C:\test\PP3E\Gui\PIL\images pyw
C:\test\PP3E\Gui\PIL\images\thumbs pyw
C:\test\PP3E\Gui\ShellGui pyw
C:\test\PP3E\Gui\ShellGui\test pyw
C:\test\PP3E\Gui\SlideShow pyw
C:\test\PP3E\Gui\TextEditor pyw
C:\test\PP3E\Gui\Tools pyw
C:\test\PP3E\Gui\Tools\BigGui pyw
C:\test\PP3E\Gui\Tools\Reload pyw
C:\test\PP3E\Gui\Tour pyw
C:\test\PP3E\Integrate pyw
C:\test\PP3E\Integrate\Embed pyw
C:\test\PP3E\Integrate\Embed\ApiClients pyw
C:\test\PP3E\Integrate\Embed\Basics pyw
C:\test\PP3E\Integrate\Embed\Basics\Old pyw
C:\test\PP3E\Integrate\Embed\Basics\pp2e pyw
C:\test\PP3E\Integrate\Embed\HighLevelApi pyw
C:\test\PP3E\Integrate\Embed\Inventory pyw
C:\test\PP3E\Integrate\Embed\Inventory\Output pyw
C:\test\PP3E\Integrate\Embed\Inventory\WithDbase pyw
C:\test\PP3E\Integrate\Embed\Inventory\WithDbase\Data pyw
C:\test\PP3E\Integrate\Embed\Inventory\WithDbase\Dbase pyw
C:\test\PP3E\Integrate\Embed\Inventory\WithDbase\Output pyw
C:\test\PP3E\Integrate\Embed\TestApi pyw
C:\test\PP3E\Integrate\Embed\TestApi\WithPackages pyw
C:\test\PP3E\Integrate\Embed\TestApi\WithPackages\pkgdir pyw
C:\test\PP3E\Integrate\Extend pyw
C:\test\PP3E\Integrate\Extend\Cenviron pyw
C:\test\PP3E\Integrate\Extend\Cenviron\Old pyw
C:\test\PP3E\Integrate\Extend\Cenviron\pp2e pyw
C:\test\PP3E\Integrate\Extend\Hello pyw
C:\test\PP3E\Integrate\Extend\HelloLib pyw
C:\test\PP3E\Integrate\Extend\HelloLib\pp2e pyw
C:\test\PP3E\Integrate\Extend\Modulator pyw
C:\test\PP3E\Integrate\Extend\Stacks pyw
C:\test\PP3E\Integrate\Extend\Stacks\pp2e pyw
C:\test\PP3E\Integrate\Extend\Swig pyw
C:\test\PP3E\Integrate\Extend\Swig\Environ pyw
C:\test\PP3E\Integrate\Extend\Swig\Environ\pp2e pyw
C:\test\PP3E\Integrate\Extend\Swig\pp2e pyw
C:\test\PP3E\Integrate\Extend\Swig\Shadow pyw
C:\test\PP3E\Integrate\Extend\Swig\Shadow\pp2e pyw
C:\test\PP3E\Integrate\Extend\Swig\swig.org.docs pyw
C:\test\PP3E\Integrate\Extend\Swig\swig.org.docs\SWIG and Python_files pyw
C:\test\PP3E\Integrate\Mixed pyw
C:\test\PP3E\Integrate\Mixed\Exports pyw
C:\test\PP3E\Integrate\Mixed\Exports\ClassAndMod pyw
C:\test\PP3E\Integrate\Mixed\Regist pyw
C:\test\PP3E\Internet pyw
C:\test\PP3E\Internet\Email pyw
C:\test\PP3E\Internet\Email\mailtools pyw
C:\test\PP3E\Internet\Email\PyMailGui pyw
C:\test\PP3E\Internet\Email\PyMailGui\etc pyw
C:\test\PP3E\Internet\Email\PyMailGui\SavedMail pyw
C:\test\PP3E\Internet\Email\PyMailGui\SavedParts pyw
C:\test\PP3E\Internet\Email\PyMailGui\TempParts pyw
C:\test\PP3E\Internet\Ftp pyw
C:\test\PP3E\Internet\Ftp\defunct pyw
C:\test\PP3E\Internet\Ftp\mirror pyw
C:\test\PP3E\Internet\Other pyw
C:\test\PP3E\Internet\Other\Grail pyw
C:\test\PP3E\Internet\Other\HTMLgen pyw
C:\test\PP3E\Internet\Other\Jython pyw
C:\test\PP3E\Internet\Other\PSP pyw
C:\test\PP3E\Internet\Other\Win pyw
C:\test\PP3E\Internet\Other\XML pyw
C:\test\PP3E\Internet\Other\Zope pyw
C:\test\PP3E\Internet\Sockets pyw
C:\test\PP3E\Internet\Web pyw
C:\test\PP3E\Internet\Web\cgi-bin pyw
C:\test\PP3E\Internet\Web\dev pyw
C:\test\PP3E\Internet\Web\dev\PyMailCGI_2.1 pyw
C:\test\PP3E\Internet\Web\dev\PyMailCGI_2.1\cgi-bin pyw
C:\test\PP3E\Internet\Web\PyErrata pyw
C:\test\PP3E\Internet\Web\PyErrata\AdminTools pyw
C:\test\PP3E\Internet\Web\PyErrata\AdminTools\DbaseFilesIndexed pyw
C:\test\PP3E\Internet\Web\PyErrata\AdminTools\DbaseFilesIndexed\commentDB pyw
C:\test\PP3E\Internet\Web\PyErrata\AdminTools\DbaseFilesIndexed\errataDB pyw
C:\test\PP3E\Internet\Web\PyErrata\AdminTools\temp pyw
C:\test\PP3E\Internet\Web\PyErrata\Chapter pyw
C:\test\PP3E\Internet\Web\PyErrata\DbaseFiles pyw
C:\test\PP3E\Internet\Web\PyErrata\DbaseFiles\commentDB pyw
C:\test\PP3E\Internet\Web\PyErrata\DbaseFiles\errataDB pyw
C:\test\PP3E\Internet\Web\PyErrata\DbaseShelve pyw
C:\test\PP3E\Internet\Web\PyErrata\Mutex pyw
C:\test\PP3E\Internet\Web\PyMailCgi pyw
C:\test\PP3E\Internet\Web\PyMailCgi\cgi-bin pyw
C:\test\PP3E\Internet\Web\PyMailCgi\partsdownload pyw
C:\test\PP3E\Internet\Web\PyMailCgi\partsupload pyw
C:\test\PP3E\Internet\Web\uploads pyw
C:\test\PP3E\Lang pyw
C:\test\PP3E\Lang\Calculator pyw
C:\test\PP3E\Lang\Parser pyw
C:\test\PP3E\Preview pyw
C:\test\PP3E\Preview\cgi-bin pyw
C:\test\PP3E\PyTools pyw
C:\test\PP3E\System pyw
C:\test\PP3E\System\App pyw
C:\test\PP3E\System\App\Bases pyw
C:\test\PP3E\System\App\Clients pyw
C:\test\PP3E\System\App\Clients\test pyw
C:\test\PP3E\System\App\Clients\test\unpack pyw
C:\test\PP3E\System\App\Clients\test\unpackapp pyw
C:\test\PP3E\System\App\Kinds pyw
C:\test\PP3E\System\App\Tests pyw
C:\test\PP3E\System\Environment pyw
C:\test\PP3E\System\Exits pyw
C:\test\PP3E\System\Filetools pyw
C:\test\PP3E\System\Media pyw
C:\test\PP3E\System\Processes pyw
C:\test\PP3E\System\Streams pyw
>>>

13 maggio 2010

La ricorsione in Python

La ricorsione dicasi quando una funzione richiama se stessa in modo ricorsivo.

ecco un esempio la funzione main() assegna un intero assegna(10), che tramite iterazione di if int > 0: stampa se stessa con dieci volte la stringa assegnata nella print. Per chi non a idea del come avviene provate a commentare #assegna(int -1) e eseguite nuovamente lo script per vedere cosa succede.

>>> def main():
... assegna(10)
...
>>> def assegna(int):
... if int > 0:
... print '|>>> recursive function <<<|'
... assegna(int -1)
...
>>> main()

|>>> recursive function <<<|
|>>> recursive function <<<|
|>>> recursive function <<<|
|>>> recursive function <<<|
|>>> recursive function <<<|
|>>> recursive function <<<|
|>>> recursive function <<<|
|>>> recursive function <<<|
|>>> recursive function <<<|
|>>> recursive function <<<|
>>>



questa crea una ricorsione infinita che vi costringe ad un CTRL-z

>>> def main():
... instrada()
...
>>> def instrada():
... print '|>>> recursive function <<<|'
... instrada()
...
>>> main()