2013-08-08 15 views
5

Nel capitolo Guida a Python su project structure, il termine "istruzione di livello superiore" viene visualizzato un paio di volte. Non sono sicuro di cosa si riferisca esattamente. Suppongo che si tratti di dichiarazioni di variabili che si verificano al di fuori di qualsiasi funzione o metodo di classe che si attivano non appena viene caricato un modulo. È corretto? Include anche le dichiarazioni import di un modulo?Che cos'è un'istruzione di livello superiore in Python?

+2

Suppongo che includa non solo importazioni e dichiarazioni, ma qualsiasi codice che si verifica al di fuori di funzioni e classi. –

risposta

15

Non si tratta solo di dichiarazioni variabili (e non ci sono comunque dichiarazioni variabili). E 'praticamente tutto ciò che inizia a livello di rientro 0.

import sys   # top-level 

3 + 4    # top-level 

x = 0    # top-level 

def f():   # top-level 
    import os  # not top-level! 
    return 3  # not top-level 

if x:    # top-level 
    print 3  # not top-level 
else: 
    print 4  # not top-level, but executes as part of an if statement 
        # that is top-level 

class TopLevel(object): # top-level 
    x = 3   # not top-level, but executes as part of the class statement 
    def foo(self): # not top-level, but executes as part of the class statement 
     print 5 # not top-level 
2

Penso che tu abbia esattamente ragione, e sì che includerebbe le dichiarazioni di importazione.

1

Ecco la prima menzione di "dichiarazione di alto livello":

volta modu.py viene trovato, l'interprete Python eseguirà il modulo in un ambito isolato. Verrà eseguita qualsiasi istruzione di livello superiore in modu.py, incluse eventuali altre importazioni. Le definizioni di funzioni e classi sono memorizzate nel dizionario del modulo.

Questo rende chiaro che ciò che intendono veramente è "le cose che vengono interpretate in tempo import".

Anche se non è molto utile direttamente, lo Python documentation itself utilizza anche la frase "livello superiore" (componenti, che in questo contesto significa "istruzioni").

Si noti che questo modulo:

"""a python module, spam.py""" 

def spam(): 
    return "spam" 

class Spam(object): 
    pass 

ha due dichiarazioni in esso, la def e class. Questi sono entrambi eseguiti al momento dell'importazione. Queste definizioni sono dichiarazioni composte (vedere le descrizioni def e class). Se ci sono decoratori collegati a un livello superiore def, questo aggiunge ancora più cose di primo livello da eseguire. (Vedi anche user2357112's answer: in esecuzione una dichiarazione class invoca più funzionamento interno.)

Aggiungi un import sys in alto ed è stato aggiunto un terzo comunicato, che importa sys. Tuttavia, se si aggiunge questo:

def ham(eggs): 
    import os 
    return os.path.basename(eggs) 

avete ancora aggiunto una sola istruzione, la def ham, per la roba di alto livello. È quando viene eseguito ham (chiamato) che verrà eseguito il import os.

Problemi correlati