2009-07-26 24 views
10

Tôi đang sử dụng mô-đun tích hợp để chèn một vài trường hợp, để chúng có thể được truy cập trên toàn cầu cho mục đích gỡ lỗi. Vấn đề với mô-đun __builtins__ là nó là một mô-đun trong kịch bản chính và là lệnh trong mô-đun, nhưng khi kịch bản của tôi tùy thuộc vào trường hợp có thể là tập lệnh chính hoặc mô-đun, tôi phải làm như sau:lý do tại sao __builtins__ là cả hai mô-đun và dict

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

Có cách giải quyết nào ngắn hơn điều này không? Quan trọng hơn, tại sao __builtins__ hoạt động theo cách này?

Đây là tập lệnh để xem điều này. Tạo một a.py mô-đun:

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

Tạo một b.py mô-đun:

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

Bây giờ chạy a.py python:

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

Mọi chi tiết, thấy http://stackoverflow.com/questions/11181519/python-whats-the-difference-between-builtin-and-builtins [Có thể trùng lặp] – pd12

Trả lời

11

Tôi nghĩ rằng bạn muốn module __builtin__ (lưu ý số ít).

Xem các tài liệu:

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

Điều gì về Python3? 'NameError: name '__builtin__' không được định nghĩa' – warvariuc

+0

@warvariuc: mô-đun được đổi tên thành ['builtins'] (https://docs.python.org/3/library/builtins.html). –

Các vấn đề liên quan