जब आप निष्पादित
import pygame
pygame पूरी तरह से आयातित और काम करने के लिए तैयार कर रहा है, कोई और अधिक आयात की जरूरत है।
अब सवाल इस लाइन के बारे में है:
from pygame.locals import *
कई कारण यह प्रयोग किया जाना चाहिए रहे हैं, और कुछ कारणों से ऐसा करने के लिए नहीं।
- प्रदर्शन। जब आप
foo.bar.baz.ClassName.classmethod()
जैसे कुछ टाइप करते हैं, तो नामस्थान में 4 लुकअप होंगे, जिनकी लागत कुछ समय होगी। कोड में ऐसी अधिक लाइनें, समय की अधिक अनावश्यक अपशिष्ट।
- सरलता। जब आप ट्यूटोरियल लिखते हैं, तो आप चीजों को जितना संभव हो उतना सरल समझाने की कोशिश करते हैं। तो कम कोड, बेहतर ट्यूटोरियल।
- आसानी से। जब आप अपना कोड टाइप करते हैं, तो आप इसे विभिन्न फ़ाइलों में फैलाते हैं। क्योंकि छोटी तरफ-फाइलों के साथ काम करना आसान है, और फिर उन सभी को मुख्य में आयात करें। लेकिन आप पूरी तरह से समझते हैं कि आप क्या आयात कर रहे हैं।
- नेमस्पेस प्रदूषण। जब आप मॉड्यूल से ग्लोबल्स में सब कुछ आयात करते हैं, तो आप वैश्विक चर की पसंद में अधिक सीमित होते हैं। उदाहरण के लिए,
from struct import *
आप अपने फ़ंक्शन को pack
के रूप में नामित नहीं कर सकते हैं। तो, इस तरह के आयात का उपयोग करने से पहले, आपको मॉड्यूल का पता लगाना चाहिए। इसमें क्या शामिल है? यह अपने आप से क्या आयात करता है?
- मेस। जब आप इस तरह के आयात का उपयोग कई बार करते हैं,
from foo import *
और from bar import *
और from baz import *
, कुछ चर या स्थिरांक छायांकित या ओवरराइट किए जा सकते हैं। इस उदाहरण में, foo.version
bar.version
के साथ ओवरराइट किया गया है, जिसे अब version
नाम दिया गया है। तो, foo.checkversion()
अब और सही तरीके से काम नहीं करेगा।
उचित रूप से सामान्य रूप से प्रयुक्त कार्यों को आयात करने के लिए उचित तरीका है, या उन्हें त्वरित संदर्भ देना है, खासकर जब आप मॉड्यूल को अच्छी तरह से नहीं जानते हैं।
उदाहरण के लिए:
from foo.bar.baz import a_very_useful_function
या
import foo.bar.baz
quick_referenced_fn = foo.bar.baz.a_very_useful_function
यहाँ quick_referenced_fn
अभी भी foo.bar.baz.a_very_useful_function
है और foo.bar.baz
का नाम स्थान में काम करता है, लेकिन दुभाषिया सीधे अपने पता जानता है और अतिरिक्त लुकअप नहीं होगा।
यह थोड़ा अनावश्यक लगता है। – corazza
@बेन: यह अनावश्यक नहीं है। आप अपने नामस्थान में क्या प्राप्त करते हैं, और कैसे स्पष्ट रूप से स्पष्ट कर रहे हैं। –
'pygame.locals' को स्थानीय कहा जाता है क्योंकि यह उन कार्यों से भरा होता है जिन्हें आप अक्सर कॉल करते हैं। हर बार 'pygame.locals.' जोड़ना कोड कम कॉम्पैक्ट करेगा। –