python एक लूप में कार्यों का निर्माण



function (1)

मैं एक लूप के अंदर कार्यों को बनाने और उन्हें एक शब्दकोश में संग्रहित करने की कोशिश कर रहा हूं। समस्या यह है कि शब्दकोश में सभी प्रविष्टियां अंतिम बनाए गए फ़ंक्शन पर मैपिंग समाप्त होती हैं। कोड इस तरह जाता है:

d = {}
def test(**kwargs):
    for k in kwargs:
        def f():
            print k, kwargs[k]
        d[k] = f
        f()

test(foo=1, bar=2)
print 'should print the same output as before'
d['foo']()
d['bar']()

यह आउटपुट:

foo 1
bar 2
should print the same output as before
bar 2
bar 2

कोई विचार क्यों?


आप देर से बाध्यकारी के साथ एक समस्या में भाग रहे हैं - प्रत्येक समारोह जितना संभव हो सके के रूप में देखता है (इस प्रकार, जब बाहरी test कहा जाता है, यह लूप के अंत के बाद होता है)।

प्रारंभिक बाध्यकारी को मजबूती से आसानी से तय किया गया: def f(): def f(k=k): को बदलने के लिए def f(k=k): - डिफ़ॉल्ट मान ( k=k में दाएं हाथ के k तर्क तर्क नाम के लिए एक डिफ़ॉल्ट मान है, जो बाएं- हाथ k में k=k ) को समय पर नहीं देखा जाता है, call समय पर नहीं, इसलिए अनिवार्य रूप से वे प्रारंभिक बाध्यकारी की तलाश करने का एक तरीका हैं।

यदि आप एक अतिरिक्त तर्क प्राप्त करने के बारे में चिंतित हैं (और इस प्रकार संभावित रूप से गलती से कहा जा रहा है), तो एक अधिक परिष्कृत तरीका है जिसमें "फ़ंक्शन फैक्ट्री" के रूप में बंद होने का उपयोग शामिल है:

def make_f(kwargs, k):
    def f():
        print k, kwargs[k]
    return f

और आपके लूप में f = make_f(kwargs, k) कथन के बजाय f = make_f(kwargs, k) उपयोग करें।





function