SlideShare ist ein Scribd-Unternehmen logo
1 von 6
Downloaden Sie, um offline zu lesen
Agosto 2006




Namespace
 - Visibilita' delle variabili
Moduli
 - File che contengono definizioni e istruzioni
Package
 - Organizzare lo spazio dei nomi
Istruzioni speciali
 - Alcune istruzioni speciali




                                   Loris Michielutti                  1
                                    Loris Michielutti
Python Avanzato

               Accesso dinamico al nome delle variabili
- I namespace in python sono implementati tramite i dizionari
     in altre parole tutti i nomi di variabili o funzioni sono memorizzati in tali strutture
                 Visibilita'
- Esistono dizionari per le variabili locali locals(), vars(x) e per quelle globali globals()
     vengono usati a seconda del contesto in cui ci troviamo
Es:
     a = 1; b = 5               # il dizionario locale avra' il contenuto seguente:
     {'a' : 1 , 'b' : 5, ...}
     >> print locals()['a'] # ci restituisce
     >> 1
- vars(x) si comporta come locals in assenza di parametri mentre con il parametro
                 ispeziona il dizionario dell'argomento passato
- Python all'atto dell'assegnazione crea la variabile se non esiste nel dizionario locale!
     Se si vuol usare una variabile esterna bisogna dichiararla globale
def prova:
     global a                # dichiaro che la variabile a e' definita esterna alla funzione
     a = 10                  # assegna 10 alla variabile che si trova da qualche altra parte

                                     Loris Michielutti                                     2
                                      Loris Michielutti
Python Avanzato


 - Quando i programmi si fanno complessi e' opportuno suddividere le definizioni di
     funzioni e variabili in piu' files in modo ordinato per tipologia.
- Questi files prendono il nome di moduli e hanno estensione .py
     questi possono contenere anche delle istruzioni che serviranno a inizializzare
     le variabili quando il modulo e' richiamato la prima volta.
               Ricerca
- Quando un modulo e' importato l'interprete segue un percorso di ricerca ben definito:
    - Directory corrente (.)
    - nella lista specificata dalla variabile d'ambiente PYTHONPATH
    - nel percorso predefinito dall'istallazione (es:/usr/local/bin/python)
               Compilazione
- Un'accellerazione rilevante dei tempi si ottiene quando si richiama un modulo gia'
    compilato. Questo si compila la prima volta che si richiama e viene generato
    un file con stesso nome ma con estensione .pyc
- Se si vuol ottimizzare la compilazione si puo' usare da linea di comando
    - python -O nomeModulo.py
    questo genera un file ottimizzato con estensione .pyo
    eliminando le eventuali istruzioni di assert usate per il debug

                                  Loris Michielutti                                   3
                                   Loris Michielutti
Python Avanzato

                Organizzare i nomi
 - Il package e' un metodo per organizzare i moduli in modo strutturato
                Directory
- E' il nostro Contenitore principale dove inseriremo il file __init__.py
       responsabile della descrizione della struttura.
  Questo serve ad evitare che nomi di Directory si sovrappongono a nomi di moduli reali !
                esempio di un Package con File system gerarchico:
       Sound/                              # contenitore principale
           __init__.py                     # inizializza il package sound
           Formats/
                __init__.py                # inizializza il package formats
                wavRead.py
                wavWrite.py
           Effects/
                __init__.py                # inizializza il package effects
                echo.py
                surround.py

- Nel caso piu' semplice __init__.py puo' essere un file vuoto
  altre volte puo' contenere istruzioni di ogni genere (es: inizializzazione dei packages)
                                   Loris Michielutti                                 4
                                    Loris Michielutti
Python Avanzato

               Import dei package
 - I moduli dei package vengono importati come dei moduli normali solo che i packages
      vengono richiamati separandoli con dei punti.
            esempio:
import Sound.Effects.surround            # carico il modulo surround

- un modo alternativo

from Sound.Effects import surround       # carico il modulo surround senza prefisso del
                                         # del package
- attenzione !!!

from Sound.Effects import *              # idealmente dovrebbe caricare tutti i
                                              sottomoduli presenti nel package

- questa istruzione non funziona molto bene in tutte le piattaforme si demanda
    all'autore di definire e mantenere la lista aggiornata dei moduli da caricare
    con l'istruzione:
    __all__ = [“echo”, “surround”]
    da inserire nel file
    __init__.py
                                   Loris Michielutti                                5
                                    Loris Michielutti
Python Avanzato

                                exec
 - Si usa per eseguire dinamicamente istruzioni python memorizzate in stringhe o files
exec 'print “Ciao mondo!”'
                                eval
- Si usa per valutare espressioni memorizzate in una stringa
eval ( “2*3”')
                                assert
- Si usa per asserire o imporre che qualcosa sia vero
miaLista = [“ciao”]
assert len(miaLista) >= 1
 quando qualcuno rimuove l'ultimo elemento dalla lista viene sollevata
 una eccezione di AssertionError
                                repr
- Si usa per ottenere una stringa rappresentativa dell'oggetto
i = [“elemento']
repr (i)
torna la stringa “[“elemento']”




                                  Loris Michielutti                                6
                                   Loris Michielutti

Weitere ähnliche Inhalte

Was ist angesagt?

Py a2 python-documentazione
Py a2 python-documentazionePy a2 python-documentazione
Py a2 python-documentazione
Majong DevJfu
 
Pycrashcourse3.1
Pycrashcourse3.1Pycrashcourse3.1
Pycrashcourse3.1
rik0
 
Pycrashcourse3.0
Pycrashcourse3.0Pycrashcourse3.0
Pycrashcourse3.0
rik0
 
Pe t2 perl-caratteristiche
Pe t2 perl-caratteristichePe t2 perl-caratteristiche
Pe t2 perl-caratteristiche
Majong DevJfu
 

Was ist angesagt? (20)

Py a2 python-documentazione
Py a2 python-documentazionePy a2 python-documentazione
Py a2 python-documentazione
 
Scala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perchéScala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perché
 
2011.02.19 Introducing F#
2011.02.19 Introducing F#2011.02.19 Introducing F#
2011.02.19 Introducing F#
 
2006 Py02 base
2006 Py02 base2006 Py02 base
2006 Py02 base
 
2008 python
2008 python2008 python
2008 python
 
Inferno Limbo Italian
Inferno Limbo ItalianInferno Limbo Italian
Inferno Limbo Italian
 
Spyppolare o non spyppolare
Spyppolare o non spyppolareSpyppolare o non spyppolare
Spyppolare o non spyppolare
 
Python@Unina - Theory
Python@Unina - TheoryPython@Unina - Theory
Python@Unina - Theory
 
Pycrashcourse
PycrashcoursePycrashcourse
Pycrashcourse
 
Pe t4 perl-oggetti
Pe t4 perl-oggettiPe t4 perl-oggetti
Pe t4 perl-oggetti
 
Pe t3 perl-moduli
Pe t3 perl-moduliPe t3 perl-moduli
Pe t3 perl-moduli
 
Corso Python Deltapromo lezione 1
Corso Python Deltapromo   lezione 1Corso Python Deltapromo   lezione 1
Corso Python Deltapromo lezione 1
 
Pycrashcourse4.0 pdfjam
Pycrashcourse4.0 pdfjamPycrashcourse4.0 pdfjam
Pycrashcourse4.0 pdfjam
 
T7 librerie
T7 librerieT7 librerie
T7 librerie
 
11 I File
11   I File11   I File
11 I File
 
Pycrashcourse3.1
Pycrashcourse3.1Pycrashcourse3.1
Pycrashcourse3.1
 
Let's give it a GO!
Let's give it a GO!Let's give it a GO!
Let's give it a GO!
 
Pycrashcourse3.0
Pycrashcourse3.0Pycrashcourse3.0
Pycrashcourse3.0
 
Pe t2 perl-caratteristiche
Pe t2 perl-caratteristichePe t2 perl-caratteristiche
Pe t2 perl-caratteristiche
 
T3 esempio runtime
T3 esempio runtimeT3 esempio runtime
T3 esempio runtime
 

Ähnlich wie 2006 Py04 avanzato

Pe a3 perl-metaprogramming
Pe a3 perl-metaprogrammingPe a3 perl-metaprogramming
Pe a3 perl-metaprogramming
Majong DevJfu
 
Virginio Desktop Analisi
Virginio Desktop   AnalisiVirginio Desktop   Analisi
Virginio Desktop Analisi
Alartzero
 
Lezione corso Base GNU/Linux
Lezione corso Base GNU/LinuxLezione corso Base GNU/Linux
Lezione corso Base GNU/Linux
Alex Palesandro
 

Ähnlich wie 2006 Py04 avanzato (18)

Lezione Quattro
Lezione QuattroLezione Quattro
Lezione Quattro
 
Linux & Open Source : Lezione Quattro
Linux & Open Source : Lezione QuattroLinux & Open Source : Lezione Quattro
Linux & Open Source : Lezione Quattro
 
Pacchi e pacchetti
Pacchi e pacchettiPacchi e pacchetti
Pacchi e pacchetti
 
Programming iOS lezione 3
Programming iOS lezione 3Programming iOS lezione 3
Programming iOS lezione 3
 
Lezione Tre
Lezione TreLezione Tre
Lezione Tre
 
introduzione a symfony 2
introduzione a symfony 2 introduzione a symfony 2
introduzione a symfony 2
 
Introduzione alla programmazione Android - Android@tulug lezione 4
Introduzione alla programmazione Android - Android@tulug lezione 4Introduzione alla programmazione Android - Android@tulug lezione 4
Introduzione alla programmazione Android - Android@tulug lezione 4
 
Apache Maven - Gestione di progetti Java e build automation
Apache Maven - Gestione di progetti Java e build automationApache Maven - Gestione di progetti Java e build automation
Apache Maven - Gestione di progetti Java e build automation
 
Pe a3 perl-metaprogramming
Pe a3 perl-metaprogrammingPe a3 perl-metaprogramming
Pe a3 perl-metaprogramming
 
Corso Java
Corso JavaCorso Java
Corso Java
 
Presentazione java7
Presentazione java7Presentazione java7
Presentazione java7
 
Create R package with RStudio
Create R package with RStudioCreate R package with RStudio
Create R package with RStudio
 
Virginio Desktop Analisi
Virginio Desktop   AnalisiVirginio Desktop   Analisi
Virginio Desktop Analisi
 
Linux & Open Source : Lezione Cinque
Linux & Open Source : Lezione CinqueLinux & Open Source : Lezione Cinque
Linux & Open Source : Lezione Cinque
 
Lezione Cinque
Lezione CinqueLezione Cinque
Lezione Cinque
 
Linux & Open Source : Lezione 1
Linux & Open Source : Lezione 1Linux & Open Source : Lezione 1
Linux & Open Source : Lezione 1
 
Installazione di koha_su_debian_v2_0_20_12_2014
Installazione di koha_su_debian_v2_0_20_12_2014Installazione di koha_su_debian_v2_0_20_12_2014
Installazione di koha_su_debian_v2_0_20_12_2014
 
Lezione corso Base GNU/Linux
Lezione corso Base GNU/LinuxLezione corso Base GNU/Linux
Lezione corso Base GNU/Linux
 

2006 Py04 avanzato

  • 1. Agosto 2006 Namespace - Visibilita' delle variabili Moduli - File che contengono definizioni e istruzioni Package - Organizzare lo spazio dei nomi Istruzioni speciali - Alcune istruzioni speciali Loris Michielutti 1 Loris Michielutti
  • 2. Python Avanzato Accesso dinamico al nome delle variabili - I namespace in python sono implementati tramite i dizionari in altre parole tutti i nomi di variabili o funzioni sono memorizzati in tali strutture Visibilita' - Esistono dizionari per le variabili locali locals(), vars(x) e per quelle globali globals() vengono usati a seconda del contesto in cui ci troviamo Es: a = 1; b = 5 # il dizionario locale avra' il contenuto seguente: {'a' : 1 , 'b' : 5, ...} >> print locals()['a'] # ci restituisce >> 1 - vars(x) si comporta come locals in assenza di parametri mentre con il parametro ispeziona il dizionario dell'argomento passato - Python all'atto dell'assegnazione crea la variabile se non esiste nel dizionario locale! Se si vuol usare una variabile esterna bisogna dichiararla globale def prova: global a # dichiaro che la variabile a e' definita esterna alla funzione a = 10 # assegna 10 alla variabile che si trova da qualche altra parte Loris Michielutti 2 Loris Michielutti
  • 3. Python Avanzato - Quando i programmi si fanno complessi e' opportuno suddividere le definizioni di funzioni e variabili in piu' files in modo ordinato per tipologia. - Questi files prendono il nome di moduli e hanno estensione .py questi possono contenere anche delle istruzioni che serviranno a inizializzare le variabili quando il modulo e' richiamato la prima volta. Ricerca - Quando un modulo e' importato l'interprete segue un percorso di ricerca ben definito: - Directory corrente (.) - nella lista specificata dalla variabile d'ambiente PYTHONPATH - nel percorso predefinito dall'istallazione (es:/usr/local/bin/python) Compilazione - Un'accellerazione rilevante dei tempi si ottiene quando si richiama un modulo gia' compilato. Questo si compila la prima volta che si richiama e viene generato un file con stesso nome ma con estensione .pyc - Se si vuol ottimizzare la compilazione si puo' usare da linea di comando - python -O nomeModulo.py questo genera un file ottimizzato con estensione .pyo eliminando le eventuali istruzioni di assert usate per il debug Loris Michielutti 3 Loris Michielutti
  • 4. Python Avanzato Organizzare i nomi - Il package e' un metodo per organizzare i moduli in modo strutturato Directory - E' il nostro Contenitore principale dove inseriremo il file __init__.py responsabile della descrizione della struttura. Questo serve ad evitare che nomi di Directory si sovrappongono a nomi di moduli reali ! esempio di un Package con File system gerarchico: Sound/ # contenitore principale __init__.py # inizializza il package sound Formats/ __init__.py # inizializza il package formats wavRead.py wavWrite.py Effects/ __init__.py # inizializza il package effects echo.py surround.py - Nel caso piu' semplice __init__.py puo' essere un file vuoto altre volte puo' contenere istruzioni di ogni genere (es: inizializzazione dei packages) Loris Michielutti 4 Loris Michielutti
  • 5. Python Avanzato Import dei package - I moduli dei package vengono importati come dei moduli normali solo che i packages vengono richiamati separandoli con dei punti. esempio: import Sound.Effects.surround # carico il modulo surround - un modo alternativo from Sound.Effects import surround # carico il modulo surround senza prefisso del # del package - attenzione !!! from Sound.Effects import * # idealmente dovrebbe caricare tutti i sottomoduli presenti nel package - questa istruzione non funziona molto bene in tutte le piattaforme si demanda all'autore di definire e mantenere la lista aggiornata dei moduli da caricare con l'istruzione: __all__ = [“echo”, “surround”] da inserire nel file __init__.py Loris Michielutti 5 Loris Michielutti
  • 6. Python Avanzato exec - Si usa per eseguire dinamicamente istruzioni python memorizzate in stringhe o files exec 'print “Ciao mondo!”' eval - Si usa per valutare espressioni memorizzate in una stringa eval ( “2*3”') assert - Si usa per asserire o imporre che qualcosa sia vero miaLista = [“ciao”] assert len(miaLista) >= 1 quando qualcuno rimuove l'ultimo elemento dalla lista viene sollevata una eccezione di AssertionError repr - Si usa per ottenere una stringa rappresentativa dell'oggetto i = [“elemento'] repr (i) torna la stringa “[“elemento']” Loris Michielutti 6 Loris Michielutti