2009-07-26 10 views
10

Używam wbudowanego modułu do wstawienia kilku instancji, aby można było uzyskać do nich dostęp globalnie w celu debugowania. Problem z modułem __builtins__ polega na tym, że jest to moduł w głównym skrypcie i jest dyktando w modułach, ale ponieważ mój skrypt w zależności od przypadku może być skryptem głównym lub modułem, muszę to zrobić:dlaczego __builtins__ jest modułem i dyktafonem

if isinstance(__builtins__, dict): 
    __builtins__['g_frame'] = 'xxx' 
else: 
    setattr(__builtins__, 'g_frame', 'xxx') 

Czy istnieje obejście krótsze niż to? Co ważniejsze, dlaczego zachowuje się w ten sposób __builtins__?

Oto skrypt, aby to zobaczyć. Tworzenie a.py modułu:

#module-a 
import b 
print 'a-builtin:',type(__builtins__) 

Utwórz b.py modułu:

#module-b 
print 'b-builtin:',type(__builtins__) 

Teraz uruchom pyton a.py:

$ python a.py 
b-builtin: <type 'dict'> 
a-builtin: <type 'module'> 
+0

Aby uzyskać więcej informacji, zobacz http://stackoverflow.com/questions/11181519/python-whats-the-difference-between-builtin-and-builtins [Możliwy duplikat] – pd12

Odpowiedz

11

myślę chcesz moduł __builtin__ (zanotuj liczbę pojedynczą).

Zobacz docs:

27.3. __builtin__ — Built-in objects

CPython implementation detail: Most modules have the name __builtins__ (note the 's') made available as part of their globals. The value of __builtins__ is normally either this module or the value of this modules’s [sic] __dict__ attribute. Since this is an implementation detail, it may not be used by alternate implementations of Python.

+0

Co z Python3? 'NameError: name '__builtin__' is not defined' – warvariuc

+0

@warvariuc: nazwa modułu została zmieniona na [' builtins'] (https://docs.python.org/3/library/builtins.html). –

Powiązane problemy