2015-01-08 5 views
6

official Python 2.7 docs इन विधियों के लिए लगभग समान लगता है, एकमात्र अंतर ऐसा लगता है कि निकालने के दौरान() को हटाए जाने पर एक कुंजी त्रुटि उठाती है।पायथन में set.discard और set.remove विधियों के बीच रनटाइम अंतर?

मुझे आश्चर्य है कि इन दो तरीकों के बीच निष्पादन गति में कोई अंतर है या नहीं। यह विफल हो रहा है, क्या उनके बीच कोई सार्थक अंतर है (KeyError को छोड़कर)?

उत्तर

16

एक मामले में अपवाद उठाना बहुत सार्थक अंतर है। यदि किसी सेट से कोई तत्व निकालने का प्रयास नहीं किया गया है, तो कोई त्रुटि नहीं होगी, तो set.discard() के बजाय आप बेहतर set.remove() का उपयोग करें।

दो तरीकों, कार्यान्वयन में समान हैं, सिवाय इसके कि set_discard() की तुलना में set_remove() function लाइनों को जोड़ता है:

if (rv == DISCARD_NOTFOUND) { 
    set_key_error(key); 
    return NULL; 
} 

यह KeyError को जन्म देती है। चूंकि यह थोड़ा और काम है, set.remove() एक किशोर अंश धीमा है; आपके सीपीयू को लौटने से पहले एक अतिरिक्त परीक्षण करना है। लेकिन अगर आपका एल्गोरिदम अपवाद पर निर्भर करता है तो अतिरिक्त शाखा परीक्षण शायद ही कोई फर्क नहीं पड़ता है।

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