मैं एक छोटे से फ़ाइल उपयोगिता पहले लिख रहा था बनाए रखने, और संदर्भ द्वारा पारित होने के साथ एक मुद्दा में भाग लिए। How do I pass a variable by reference? पढ़ने के बाद, मैंने वेरिएबल सेट किया जिसे मैं एक तर्क के रूप में और वापसी मूल्य के रूप में पारित करना चाहता था। नीचे दिए गए कोड के भीतर, यह लाइन है:pythonic तरीका चर काम
diff = compareDir(path0, path0List, path1, path1List, diff)
जहां diff वैरिएबल है जिसे मैं संदर्भ से पास करना चाहता हूं।
हालांकि यह काम करता है, यह नहीं बल्कि अजीब लगता है। मुझे लगता है कि एक बेहतर तरीका होना चाहिए। कई अन्य भाषाओं में, मैं compareLists()
को कोई वापसी मूल्य प्राप्त करने के लिए सेट कर सकता हूं, और पास-दर-संदर्भ तर्क को संशोधित करने के दुष्प्रभाव का उपयोग कर सकता हूं। पाइथन के पास-बाय-असाइनमेंट को यह अस्वीकार करना प्रतीत होता है।
मैं अजगर को अपेक्षाकृत नया हूँ, और अगर वहाँ मेरी समस्या का समाधान करने के लिए एक और अधिक pythonic तरीका है पता करना चाहते हैं। क्या इसे पूरी तरह से कार्यों पर पुनर्विचार की आवश्यकता होगी? या क्या कोई अच्छा बयान है जो मुझे अनजान है? मैं वैश्विक चर से दूर रहना चाहता हूं।
मैं किसी भी और सभी रचनात्मक आलोचनाओं और टिप्पणियों का स्वागत करते। धन्यवाद!
प्रासंगिक कोड:
def comparePaths(path0, path1):
path0List = os.listdir(path0)
path1List = os.listdir(path1)
diff = False
diff = compareDir(path0, path0List, path1, path1List, diff)
print()
diff = compareDir(path1, path1List, path0, path0List, diff)
return diff
def compareDir(basePath, baseList, comparePath, compareDir, diffVar):
for entry in baseList:
#compare to the other folder
if (not (entry in compareDir)):
if (not (diffVar)):
diffVar = True
print ("Discreptancies found. The following files are different:")
print (str(entry) + " doesn\'t exist in " + str(comparePath))
else:
print (str(entry) + " doesn\'t exist in " + str(comparePath))
return diffVar
यदि आप कुछ ऐसे पैरामीटर को काटना चाहते हैं जहां आप केवल 'तुलनासूची()' कहते हैं, तो मुझे लगता है कि आपको अपने दृष्टिकोण पर पुनर्विचार करने की आवश्यकता हो सकती है। शायद अपने मूल्यों को एक शब्दकोश में संग्रहीत करके क्योंकि आप नामस्थान में कहीं भी कुंजी/मूल्य जोड़े को संशोधित कर सकते हैं। – Dan
धन्यवाद दान, यह एक उत्कृष्ट सुझाव है। मैं बस यही कर सकता हूँ। –
जुड़ा हुआ उत्तर परिवर्तनीय और अपरिवर्तनीय वस्तुओं के बीच भेद को समझाने का एक बिल्कुल अच्छा काम करता है। 'diff = झूठा 'अपरिवर्तनीय है। 'diff = [गलत]' उत्परिवर्तनीय है। – hpaulj