बनाम मैं हाल ही में कुछ tweets और hasattr के बारे में python documentation पढ़ने किया गया है और यह कहते हैं:अजगर hasattr getattr
hasattr (वस्तु, नाम)
तर्क एक वस्तु और एक स्ट्रिंग है। नतीजा सही है यदि स्ट्रिंग का नाम ऑब्जेक्ट के गुणों में से एक है, तो गलत नहीं है। (यह getattr (वस्तु, नाम) को कॉल करने और क्या यह एक AttributeError या नहीं उठाती देखकर कार्यान्वित किया जाता है।)
पायथन में एक आदर्श वाक्य है कि का कहना है कि है आसान माफी के लिए पूछने की भी नहीं है अनुमति से जहां मैं आमतौर पर सहमत हूं।
import timeit
definition="""\
class A(object):
a = 1
a = A()
"""
stm="""\
hasattr(a, 'a')
"""
print timeit.timeit(stmt=stm, setup=definition, number=10000000)
stm="""\
getattr(a, 'a')
"""
print timeit.timeit(stmt=stm, setup=definition, number=10000000)
परिणामों के साथ
:
$ python test.py
hasattr(a, 'a')
1.26515984535
getattr(a, 'a')
1.32518696785
मैं भी करने की कोशिश की तो क्या होता है विशेषता नहीं करता
मैं एक बहुत साधारण अजगर कोड के साथ इस मामले में एक प्रदर्शन परीक्षण करने की कोशिश की अस्तित्व में नहीं है और गेटैटर और हैट्टर के बीच अंतर बड़ा है। तो मैंने अब तक जो देखा है वह है कि गेटैटर हैशर की तुलना में धीमी है, लेकिन प्रलेखन में यह कहता है कि यह गेटैटर को कॉल करता है।
मैंने hasattr और getattr की CPython कार्यान्वयन खोज की है और ऐसा लगता है कि दोनों अगले फ़ंक्शन को कॉल करें:
v = PyObject_GetAttr(v, name);
लेकिन वहाँ getattr में hasattr कि शायद यह धीमा हो जाता है की तुलना में अधिक बॉयलरप्लेट है।
क्या कोई जानता है कि दस्तावेज़ में हम क्यों कहते हैं कि हैटट्रर गेटैटर कहता है और हम उपयोगकर्ताओं को हैशर के बजाय गेटैटर का उपयोग करने के लिए प्रोत्साहित करते हैं जब यह वास्तव में प्रदर्शन के कारण नहीं होता है? सिर्फ इसलिए कि यह अधिक पाइथनिक है?
शायद मैं कुछ अपने परीक्षण :)
धन्यवाद में गलत कर रहा हूँ,
राउल
यहाँ अंतर प्रदर्शन नहीं है। आप 5 नैनोसेकंड की तरह बात कर रहे हैं। आप पाइथन का उपयोग करके हजारों बार खो देते हैं। यहां अंतर यह है कि आपको क्या करना है इसके लिए कौन सा सही है। – cHao
प्रदर्शन अंतर बिंदु नहीं था। मुझे समझ में नहीं आया कि दस्तावेज़ीकरण में टिप्पणी क्यों कह रही है कि इसे लागू करने के लिए इसे लागू किया गया था। – raulcumplido
शायद एक बिंदु पर इसे 'गेटैटर' कहा गया था, और अब यह नहीं है, लेकिन कोई भी दस्तावेज़ अपडेट नहीं किया गया है ...? स्पष्ट रूप से, हालांकि, यह ऐसा बयान है जो एपीआई दस्तावेज में किसी भी तरह से संबंधित नहीं है। दस्तावेज़ों को समझा जाना चाहिए कि क्या होता है, यह नहीं होता कि यह कैसे होता है, जब तक कि "कैसे" "अनिवार्य" का एक अनिवार्य हिस्सा न हो। – cHao