2013-11-09 15 views
6

Tôi biết rằng import * là xấu, nhưng đôi khi tôi sử dụng nó cho prototyping nhanh chóng khi tôi cảm thấy quá lười biếng để gõ hoặc nhớ nhập khẩuPython: `từ x nhập khẩu *` không nhập khẩu tất cả mọi thứ

tôi đang cố gắng đoạn mã sau :

from OpenGL.GL import * 

shaders.doSomething() 

Nó là kết quả trong một lỗi: `NameError: tên toàn cầu 'shaders' không được định nghĩa'

Nếu tôi thay đổi hàng nhập khẩu:

from OpenGL.GL import * 
from OpenGL.GL import shaders 

shaders.doSomething() 

Lỗi biến mất. Tại sao * không bao gồm shaders?

+1

Có vẻ như 'OpenGL.GL.shaders' là một gói con, không phải là đối tượng được xác định trong' OpenGL.GL'. – Cameron

+0

Trình mô phỏng có phải là mô-đun không? – sapi

+0

http: // stackoverflow.com/a/64130/1265154 – alko

Trả lời

3

shaders là một submodule, không phải là một chức năng.

Cú pháp from module import something không nhập mô-đun con (Nào, như câu trả lời khác được nêu, không được xác định trong __all__).

Chịu module, bạn sẽ phải nhập nó cụ thể:

from OpenGL.GL import shaders 

Hoặc, nếu bạn chỉ muốn có một vài chức năng của shaders:

from OpenGL.Gl.shaders import function1, function2, function3 

Và nếu bạn muốn để có tất cả các chức năng của shaders, sử dụng:

from OpenGL.Gl.shaders import * 

Hy vọng điều này sẽ hữu ích!

0

Tôi đã học được điều này từ tình huống của riêng tôi. Mô-đun không tự động nhập cùng với phần còn lại của gói. Trước trải nghiệm đó, hiểu lầm của tôi là các mô-đun của mỗi gói sẽ tự động nhập từ import x hoặc from x import *. Họ không.

Người mới bắt đầu có thể mong đợi mọi thứ để nhập khẩu theo những cuộc gọi đó, tôi tin. Tuy nhiên, mã lập trình GUI sau đây, mà là phổ biến, chứng minh rằng đó không phải là trường hợp:

from tkinter import * 
from tkinter import ttk 

Trong ví dụ trên, mô-đun ttk không nhập khẩu tự động cùng với phần còn lại của gói tkinter, ví dụ.

Lời giải thích rằng tôi đã được cho biết như sau: khi bạn sử dụng from x import *, bạn thực sự chỉ nhập khẩu điều trong your-python-location/lib/x/__init__.py

Gói là thư mục. Mô-đun là các tệp. Nếu quá trình nhập gọi các tệp cụ thể thì thư mục gói __init_.py sẽ liệt kê các tệp cụ thể cần nhập.

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