2013-11-09 6 views
6

आयात नहीं मुझे पता है कि import * बुरा है, लेकिन मैं कभी कभी जल्दी प्रोटोटाइप के लिए इसका इस्तेमाल करते हैं, जब मैं भी लिख सकते हैं या आयातपायथन: `से एक्स आयात *` सब कुछ

याद है कि मैं निम्नलिखित कोड कोशिश कर रहा हूँ आलसी महसूस :

from OpenGL.GL import * 

shaders.doSomething() 

यह एक त्रुटि में परिणाम है: `NameError:

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

shaders.doSomething() 
: वैश्विक नाम 'shaders' परिभाषित नहीं है '

अगर मैं आयात को बदलने

त्रुटि गायब हो जाती है। * क्यों shaders शामिल नहीं है?

+1

ऐसा लगता है कि 'OpenGL.GL.shaders' एक उप-पैकेज है, न कि' OpenGL.GL' में परिभाषित ऑब्जेक्ट। – Cameron

+0

शेडर्स एक मॉड्यूल है? – sapi

+0

http: // stackoverflow।कॉम/ए/64130/1265154 – alko

उत्तर

3

shaders एक submodule, नहीं एक समारोह है।

वाक्यविन्यास from module import something submodules आयात नहीं करता है (जो, जैसा कि एक और उत्तर कहा गया है, __all__ में परिभाषित नहीं किया गया है)।

मॉड्यूल लेने के लिए आपको यह विशेष रूप से आयात करना होगा:

from OpenGL.GL import shaders 

या, यदि आप केवल shaders के कुछ कार्यों के लिए चाहते हैं:

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

और अगर आप चाहते हैं shaders के सभी कार्यों के लिए, उपयोग करें:

from OpenGL.Gl.shaders import * 

आशा है कि इससे मदद मिलती है!

0

मैंने इसे अपनी स्थिति से सीखा। एक मॉड्यूल स्वचालित रूप से शेष पैकेज के साथ आयात नहीं किया था। उस अनुभव से पहले मेरी गलत समझ यह थी कि प्रत्येक पैकेज के मॉड्यूल स्वचालित रूप से import x या from x import * से आयात करते हैं। वे नहीं करते

शुरुआती उन कॉलों के तहत आयात करने की अपेक्षा कर सकते हैं, मुझे विश्वास है। लेकिन निम्नलिखित जीयूआई प्रोग्रामिंग कोड है, जो आम है, यह दर्शाता है कि यह मामला नहीं है:

from tkinter import * 
from tkinter import ttk 

उपरोक्त उदाहरण में, मॉड्यूल ttk स्वचालित रूप से आयात नहीं करता है tkinter पैकेज के बाकी के साथ साथ, उदाहरण के लिए।

व्याख्या यह है कि मुझे बताया गया है इस प्रकार है: जब आप from x import * उपयोग करते हैं, आप वास्तव में केवल बातें your-python-location/lib/x/__init__.py

संकुल में आयातित फ़ोल्डर हैं। मॉड्यूल फाइलें हैं। यदि आयात विशिष्ट फ़ाइलों के लिए कॉल करता है तो पैकेज फ़ोल्डर का __init_.py विशिष्ट फ़ाइलों को आयात करने के लिए गणना करेगा।

संबंधित मुद्दे