2011-12-30 14 views
5

निर्दिष्ट करने पर विचार कर रहा था कि क्या किसी को भी पाइथन के ग्लोबल बनाम मॉड्यूल को संदर्भित करने के बारे में कोई विचार था। जबकि अतीत में मैं इस्तेमाल किया वैश्विक जब जरूरत, मैंने पाया यह कुछ हद तक स्पष्ट दूसरी विधि करने के लिए (और हाल ही में इस वाक्य रचना के पक्ष में करने की प्रवृत्ति है):पाइथन का ग्लोबल बनाम मॉड्यूल

import sys 
mod = sys.modules[__name__] 

counter = 0 

def incrementGlobal(): 
    global counter 
    counter += 1 

def incrementMod(): 
    mod.counter += 1 

जाहिर है उन दोनों को अच्छा काम है, लेकिन अगर किसी को भी इसमें कोई मजबूत राय है (अधिक पाइथोनिक, प्रदर्शन आदि क्या है), मुझे उन्हें सुनना अच्छा लगेगा।

बीटीडब्ल्यू मैं इन स्थितियों में से किसी एक का उपयोग कर समाप्त करता हूं जहां मॉड्यूल स्वाभाविक रूप से सभी विधियों और विशेषताओं को एक वर्ग के रूप में परिभाषित करता है, और संदर्भ incrementmodule.IncrementClass.counter मैं केवल incrementmodule.counter का उपयोग कर सकता हूं।

+2

दूसरा एक स्पष्ट कैसे है? – delnan

+0

मुझे लगता है कि यह इतना स्पष्ट नहीं है, लेकिन मैं इसे पसंद करता हूं क्योंकि यह तुरंत स्पष्ट है कि एक स्थानीय स्तर की बजाय मॉड्यूल-स्तरीय परिवर्तनीय संशोधित किया जा रहा है (यह देखने के लिए आपको वापस जांचने से रोकता है कि चर ग्लोबल्स घोषणा में है या नहीं शीर्ष पर) – gnr

+3

यदि 'वैश्विक' और असाइनमेंट बहुत दूर हैं, तो आपको उससे अधिक स्पष्टता की समस्याएं मिली हैं;) – delnan

उत्तर

5

हर बार global के साथ जाएं। global कीवर्ड मॉड्यूल स्तर पर कुछ संशोधित करने के लिए एक स्पष्ट और आसानी से पहचानने योग्य पैटर्न है। मॉड्यूल को sys.modules से स्वयं का संदर्भ देना इसके चारों ओर जाने का एक अनिवार्य रूप से ठोस तरीका प्रतीत होता है, और अगले प्रोग्रामर को भ्रमित करने की संभावना है जो इसे देखता है।

3
  • प्रदर्शन: global शैली का उपयोग, कभी तो थोड़ा तेजी हो जाएगा के रूप में यह केवल एक ही नाम के बजाय देखने दो की जरूरत है (होगा केवल बात कई कई हजारों की एक तंग पाश में)।

  • शैली: mod.xxx शैली जिस तरह से आप एक और मॉड्यूल है कि आप आयात किया था से वैश्विक का उपयोग होगा दर्पण:

`

import foo 
foo.eggs = 'scrambled' 

global विधि ज्यादा आम है, लेकिन अपने mod.xxx विधि को समझना और बहुत पठनीय भी आसान है।

+2

कोई डाउनवोट नहीं है, लेकिन 'ग्लोबल' का उपयोग 'mod.xxx' का उपयोग करने से कहीं अधिक आम है, इसलिए मैं तर्क दूंगा कि' ग्लोबल 'का उपयोग करना अधिक सुगम है, क्योंकि यह लगभग हर किसी की अपेक्षा करता है। – EOL

+0

@EOL: सहमत है कि 'वैश्विक' प्रचलित विधि है, और अधिक तुरंत पहचानने योग्य है। –