एक मूर्ख सवाल, लेकिन यह मुझे परेशान कर रहा है (मेरी अयोग्यता के लिए डाउनवॉट्स के बावजूद!): मुझे लगता है कि मैंने विधि के बाहर डेटा उत्पन्न करने का एक बकवास डर उठाया है (बदले बिना), लेकिन अगर यह मामला है तो मुझे यकीन नहीं है।विधि के बाहर डेटा उत्पन्न करने का पाइथोनिक तरीका
मान लें कि मेरे पास myfx
विधि है, जिसके लिए कुछ शब्दकोश datadex
की आवश्यकता होगी जिसके लिए एक लंबा ऑपरेशन करना आवश्यक है, लेकिन उस सत्र के दौरान सभी कॉलों के लिए आम बात होगी। सबसे सरल, लेकिन करने योग्य नहीं, तरीका है:
def myfx(x,foo):
datadex={f:42 for f in foo} #initialise
mungeddata=datadex[x]+1 #munge
return mungeddata
लेकिन यह बहुत अधिक समय बर्बाद कर देगा। तो सबसे अच्छी बात मुख्य दायरे में यह एक बार बनाने के लिए किया जाएगा के रूप में एक वर्ग चर के साथ कार्य करता है:
datadex={f:42 for f in foo} #initialise
def myfx(x):
mungeddata=datadex[x]+1 #munge
return mungeddata
हालांकि, मैं पता नहीं क्यों, लेकिन मैं इस से बचने के लिए हद तक चले जाते हैं। यह सुरुचिपूर्ण है, लेकिन मुझे नहीं लगता कि यह मामला है। मैं आमतौर पर बंद करने का सहारा लेता हूं:
def initialise(foo):
datadex={f:42 for f in foo} #initialise
def myfx(x):
mungeddata=datadex[x]+1 #munge
return mungeddata
return myfx
या इससे भी बदतर वर्ग बनाना। मैं लगभग पायथन और जेएस में लगभग विशेष रूप से कोड। मेरा सबसे अच्छा अनुमान यह है कि यह मेरे पर्ल कोडिंग दिनों से फेंक रहा है - असुविधाजनक रूप से मैं खुद को कुछ एल्सा पास्कल लिखने के लिए खुद को ढूंढता हूं, इसलिए मुझे लगता है कि कुछ आदतें छाया के रूप में रेंगती हैं- लेकिन यह ओओ-पर्ल के रूप में कक्षा या बंद होने की विधि की व्याख्या नहीं करेगा पूरी तरह से अलग।
'मुझे नहीं पता क्यों, लेकिन मैं इससे बचने के लिए बहुत अधिक समय तक जाता हूं। यह सुरुचिपूर्ण है, लेकिन मुझे नहीं लगता कि यह मामला है - आप प्रतीत होता है कि आप कार्यात्मक प्रोग्रामिंग के बारे में सोच रहे हैं, जहां (अन्य चीजों के साथ) – Izkata
परिभाषित किए जाने के बाद वैरिएबल को बदला नहीं जा सकता है (ए) आपका प्रश्न वास्तव में क्या है? (बी) क्या आपने कामों के तर्क के रूप में बस 'डेटाडेक्स' को पारित नहीं माना है (मुझे यहां कोई तरीका नहीं दिख रहा है) जो इसका उपयोग करते हैं? – jwodder
हाँ, वह 'प्रारंभिक विधि' मूल रूप से आंशिक फ़ंक्शन एप्लिकेशन कर रही है। [Functools] (https://docs.python.org/3/library/functools.html) में [आंशिक] (https://docs.python.org/3/library/functools) नामक एक सहायक है। एचटीएमएल # functools.partial) – dtanders