2014-10-10 20 views
21

पाइथन निर्देशक का उपयोग शाब्दिक वाक्यविन्यास का उपयोग करने से धीमा क्यों है?ताना शाब्दिक वाक्यविन्यास को श्रोताओं के कन्स्ट्रक्टर पर क्यों पसंद किया जाता है?

अपने साथी के साथ गरम बहस के बाद, मैं कुछ तुलना किया था और निम्नलिखित आंकड़े मिल गया:

python2.7 -m timeit "d = dict(x=1, y=2, z=3)" 
1000000 loops, best of 3: 0.47 usec per loop 

python2.7 -m timeit "d = {'x': 1, 'y': 2, 'z': 3}" 
10000000 loops, best of 3: 0.162 usec per loop 

कारण निर्माता धीमी है क्या है? और किस स्थितियों में, यदि कोई है, तो यह तेज़ होगा?

+4

आमतौर पर इसे इस तथ्य के साथ करना होगा कि 'dict' कुछ और इंगित कर सकता है। तो दुभाषिया कोई असली अनुकूलन नहीं कर सकता है। '{} 'वाक्यविन्यास के साथ, यह उन अनुकूलन को बना सकता है। –

+7

यह है: 'dict' हमेशा एक वास्तविक फ़ंक्शन कॉल होता है, जबकि' {} 'संकलन समय पर संभाला जाता है। – Eevee

+3

संभावित डुप्लिकेट ["डी = dict()" और "डी = {}"] के बीच अंतर (http://stackoverflow.com/questions/2745008/differences-between-d-dict-and-d) –

उत्तर

28

कन्स्ट्रक्टर धीमा है क्योंकि यह dict() फ़ंक्शन को कॉल करके ऑब्जेक्ट बनाता है, जबकि कंपाइलर फ़ंक्शन कॉल को सहेजते हुए, BUILD_MAP बाइटकोड में तेंदुए को शाब्दिक बनाता है।

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