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?
risposta
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
Penso che tu abbia esattamente ragione, e sì che includerebbe le dichiarazioni di importazione.
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
.
- 1. jQuery: elementi di livello superiore che contengono x
- 2. Python, programmazione funzionale, mappatura a un livello superiore
- 3. Oggetto pacchetto livello superiore Scala
- 4. Tkinter Canvas sposta l'elemento al livello superiore
- 5. Importazioni javascript di livello superiore - Redux
- 6. eccezione di livello superiore non prendere nulla
- 7. Importare un modulo da una directory (pacchetto) di livello superiore
- 8. È possibile definire una funzione di identità di livello superiore di tipo superiore in Scala?
- 9. Get riferimento classe dalla funzione di livello superiore in Kotlin
- 10. Impossibile capire il comando di livello superiore in TCL
- 11. elenco ordini in cui l'ordine di livello superiore è sconosciuto
- 12. Come risolvere ECCEZIONE DI LIVELLO SUPERIORE INASPETTATO in Studio Android
- 13. Android: elemento di livello superiore non completato in AndroidManifest.xml
- 14. Che cos'è una classe di pari livello in Python?
- 15. Come strutturare i pacchetti Python senza ripetere il nome di livello superiore per l'importazione
- 16. Strumenti di compilazione 21.1.2 - ECCEZIONE DI LIVELLO SUPERIORE INASPETTATO
- 17. Importazione Python a livello di funzione VS. Livello modulo
- 18. Programmazione di ordine superiore con Boost :: Python
- 19. python setup.py sdist solo compreso fonte .py dal modulo di livello superiore
- 20. Previsto; dopo dichiaratore livello superiore, l'errore in Xcode
- 21. Nutch + Solr solo nella pagina di livello superiore
- 22. XSLT: Spostare il nodo di livello superiore su
- 23. Come spostare la cartella svn di livello superiore rispetto
- 24. Uso @JacksonInject con @JsonCreator su una mappa di livello superiore
- 25. ECCEZIONE DI LIVELLO SUPERIORE INASPETTATO: java.lang.IllegalArgumentException: già aggiunto
- 26. Gradle Android: creazione di più progetti, livello superiore build.gradle
- 27. È possibile registrare un intento di livello superiore nell'API Mirror?
- 28. errore TS1046: modificatore 'declare' richiesto per l'elemento di livello superiore
- 29. Quali sono i qualificatori const di livello superiore?
- 30. Wordpress: Mostra solo le categorie di livello superiore
Suppongo che includa non solo importazioni e dichiarazioni, ma qualsiasi codice che si verifica al di fuori di funzioni e classi. –