2010-06-30 4 views
6

पायथन में, मुझे पता है कि एक स्थानीय स्कोप्ड वैरिएबल को देखकर वैश्विक स्कोप्ड वैरिएबल को देखने से काफी तेज है। तो:पायथन: एक विधि के अंदर जब स्थानीय चर के बराबर कक्षा विशेषताएँ हैं?

a = 4 
def function() 
    for x in range(10000): 
     <do something with 'a'> 

धीमी गति से

def function() 
    a = 4 
    for x in range(10000): 
     <do something with 'a'> 

है तो, जब मैं एक विशेषता है और एक विधि के साथ, एक वर्ग परिभाषा को देखो:

class Classy(object): 
    def __init__(self, attribute1): 
     self.attribute1 = attribute1 
     self.attribute2 = 4 
    def method(self): 
     for x in range(10000): 
      <do something with self.attribute1 and self.attribute2> 

self.attribute के अपने प्रयोग है मेरे पहले या दूसरे समारोह की तरह? यदि मैं उप-वर्ग क्लासी के बारे में क्या हूं, और मेरे उप वर्ग में किसी विधि से विशेषता 2 तक पहुंचने का प्रयास करता हूं?

उत्तर

4

स्थानीय रूप से स्कॉप्ड चर तेजी से हैं क्योंकि दुभाषिया को एक शब्दकोश लुकअप करने की आवश्यकता नहीं है। यह संकलन-समय पर जानता है कि वास्तव में कितने स्थानीय चर होंगे और यह उन्हें सरणी के रूप में एक्सेस करने के लिए निर्देश बनाता है।

सदस्य विशेषताओं को एक शब्दकोश लुकअप की आवश्यकता होती है, इसलिए वे वैश्विक स्तर पर स्कॉप्ड चर का उपयोग करके आपके पहले उदाहरण के समान निष्पादित करते हैं।

attribute1 = self.attribute1 
# do stuff with attribute1 

जो एक स्थानीय चर में attribute1 छाया, तो केवल एक ही शब्दकोश देखने की जरूरत है:

गति के लिए, आप की तरह कुछ कर सकते हैं। मैं तब तक परेशान नहीं होता जब तक कि मैंने कुछ प्रोफाइलिंग नहीं की थी, यह दर्शाता है कि एक विधि एक बाधा थी।

+0

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

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