मुझे पाइथन में map
फ़ंक्शन के बारे में कोई प्रश्न है।पायथन नक्शा समारोह, संदर्भ/मूल्य से गुजर रहा है?
जो मैं समझता हूं उससे, फ़ंक्शन उस सूची को म्यूटेट नहीं करता है जिस पर यह चल रहा है, बल्कि एक नया बनाएं और इसे वापस कर दें। क्या ये सही है ?
साथ ही, मैं कोड का निम्न भाग है
def reflect(p,dir):
if(dir == 'X'):
func = lambda (a,b) : (a * -1, b)
else:
func = lambda (a,b) : (a, b * -1)
p = map(func,p)
print 'got', p
points
जैसे tuples की एक सरणी है: [(1, 1), (-1, 1), (-1, -1), (1, -1)]
अगर मैं इस तरीके से ऊपर फ़ंक्शन को कॉल करें:
print points
reflect(points,'X')
print points
सूची points
नहीं बदली है। हालांकि फ़ंक्शन के अंदर, प्रिंट फ़ंक्शन ठीक से प्रिंट करता है जो मैं चाहता हूं।
क्या कोई मुझे किसी दिशा में इंगित कर सकता है जहां मैं सीख सकता हूं कि यह सब मूल्य/संदर्भ आदि द्वारा गुजर रहा है, और मैं उपरोक्त को कैसे ठीक कर सकता हूं? या हो सकता है मैं अजगर में हास्केल अनुकरण करने के लिए ...
धन्यवाद
बहुत कठिन कोशिश कर रहा हूँसंपादित करें:
p = map(func,p)
के बजाय कहते हैं मैं
for i in range(len(p)):
p[i] = func(p[i])
सूची का मूल्य है फ़ंक्शन के बाहर अपडेट किया गया है, जैसे कि संदर्भ द्वारा काम करना। उह, उम्मीद है कि यह स्पष्ट है: एस
क्या आप थोड़ा और स्पष्ट कर सकते हैं कि आपका प्रश्न/समस्या क्या है? हास्केल का संदर्भ गैर-हास्केल-प्रोग्रामर के लिए बहुत उपयोगी नहीं है। – Achim
अरे।हाँ, इसके लिए खेद है, शायद हैकेल टिप्पणी को अनदेखा करें। मैं बस आश्चर्यचकित हूं कि भले ही मैं 'p = map (func, p)' करता हूं, सूची पी को फ़ंक्शन के बाहर नहीं बदला जाता है। यदि मैं एक सूची पुनरावृत्ति के साथ 'p = map (func, p) 'को प्रतिस्थापित करता हूं, तो ऐसा लगता है कि यह काम करता है। – rafalio
पायथन न तो मूल्य से गुजरता है और न ही संदर्भ द्वारा पास होता है, अजगर वस्तु द्वारा पारित किया जाता है। –