2015-09-15 5 views
5

मैं एक अजगर कई मूल्यों से मिलकर स्थापित किया है और मैं विधि इस तरह चेनिंग उपयोग करना चाहते हैं:तरीके अजगर में श्रृंखला नहीं सेट

>>> f = {1, 2, 3} 
>>> g = f.copy().discard(3) 
>>> g 
>>> 

लेकिन जी खाली हो जाता है। हालांकि, यह चेनिंग के बिना काम करता है:

>>> g = f.copy() 
>>> g 
{1, 2, 3} 
>>> g.discard(3) 
>>> g 
{1, 2} 

क्या कोई मुझे इस व्यवहार को समझा सकता है?

+4

क्या आप निष्कर्ष यह है कि आम तौर पर तरीकों अजगर में श्रृंखला करने के लिए लाया? – burnpanck

उत्तर

2

जब आप g = f.copy().discard(3) करते हैं, आप जी में विधि "छोड़ें (3)" की वापसी मान भंडारण कर रहे हैं। इस मामले में, यह कुछ भी नहीं देता है, लेकिन वस्तु को बदल देता है। यही कारण है कि दूसरे परिदृश्य पर यह काम करता है।

5

discard() सेट में एक तत्व को छोड़ देता है और None देता है।

ताकि आप जब आवंटित

g = f.copy().discard(3) 

इस

h = f.copy() # now h = f 
g = h.discard(3) # g = None; h = {1,2} 

जो आप g = None साथ छोड़ देता है के बराबर है।

0

ऐसा इसलिए है क्योंकि .discardNone देता है।

तो जब आप g = f.copy().discard(3) करते हैं तो यह f की एक प्रति बनाता है, अंतिम तत्व को छोड़ देता है, फिर None देता है। चूंकि अंतिम चीज़ को वापस करने के लिए वैरिएबल को आवंटित किया जाता है, gNone के मान के साथ समाप्त होता है।

+0

धन्यवाद, मैं समझ में नहीं आया कि एक चर श्रृंखला में पिछले विधि के रिटर्न मान द्वारा आवंटित किया गया है। –

1

इसके बजाय आप f - {3} के लिए सेट कर सकते हैं, क्योंकि - सेट पर मूल्य उत्पादन होता है और इसके इनपुट को संशोधित नहीं करता है।

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