2013-04-27 7 views
5

Perché la prima istruzione return NameError, mentre max è disponibileIn che modo __builtin__ è reso disponibile in fase di runtime?

>>> __builtin__ 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name '__builtin__' is not defined 
>>> max 
<built-in function max> 
>>> import __builtin__ 
>>> __builtin__.max 
<built-in function max> 
+0

'__builtins __. Max' – jamylak

risposta

4

Lo spazio dei nomi builtin associato all'esecuzione di un blocco di codice è in realtà trovato cercando il nome __builtins__ nel suo spazio dei nomi globale; questo dovrebbe essere un dizionario o un modulo (in quest'ultimo caso viene usato il dizionario del modulo). Per impostazione predefinita, quando nel modulo , __builtins__ è il modulo incorporato __builtin__ (nota: no 's'); quando in qualsiasi altro modulo, __builtins__ è un alias per il dizionario del modulo __builtin__ stesso. __builtins__ può essere impostato su un dizionario creato dall'utente per creare una forma debole di esecuzione limitata.

Quindi, in realtà si sta cercando __builtins__ (dal momento che ci si trova nel modulo principale)

>>> __builtins__.max 
<built-in function max> 

Ma, come accennato in precedenza, questo è solo un alias per __builtin__ (che non fa parte del principale spazio dei nomi del modulo, sebbene sia stato caricato e referenziato da __builtins__).

4

__builtin__ è solo un modo per importare/accedere al modulo pseudo nel caso in cui si desidera sostituire o aggiungere una funzione che è sempre disponibile a livello globale. Non è necessario importarlo per utilizzare le funzioni. Ma lo stesso __builtin__ non esiste su __builtin__ quindi non è disponibile senza prima importarlo.

Vedere the python docs per ulteriori informazioni su questo modulo.

2

Non è necessario import __builtin__ in modo che tutti i nomi built-in siano disponibili. Ma è necessario importarlo in modo che il nome __builtin__ sia disponibile nell'ambito del codice.

Problemi correlati