कृपया ध्यान रखें कि स्वीकृत उत्तर केवल तभी काम करते हैं जब लंबोदर को एक अलग लाइन पर दिया जाता है। यदि आप इसे किसी फ़ंक्शन के तर्क के रूप में पास करते हैं और लैम्बडा के कोड को ऑब्जेक्ट के रूप में पुनः प्राप्त करना चाहते हैं, तो समस्या थोड़ी मुश्किल हो जाती है क्योंकि inspect
आपको पूरी लाइन मिल जाएगी।
उदाहरण के लिए, एक फ़ाइल पर विचार करें test.py
:
import inspect
def main():
x, f = 3, lambda a: a + 1
print(inspect.getsource(f))
if __name__ == "__main__":
main()
इसे निष्पादित करने से आपको (मन की ओर संकेत मिलता है!):
x, f = 3, lambda a: a + 1
लैम्ब्डा के स्रोत कोड को पुनः प्राप्त करने के लिए, मेरी राय में, आपकी सबसे अच्छी शर्त, पूरे सोर्स फाइल को फिर से पार्स करना (उपयोग करके f.__code__.co_filename
) और लाइन नंबर और उसके संदर्भ द्वारा लैम्ब्डा एएसटी नोड से मेल खाना है।
हमें ठीक यही करना था कि हमारे डिजाइन-बाय-कॉन्ट्रैक्ट लाइब्रेरी में जब से हम लैम्ब्डा फंक्शन्स को पार्स करते हैं, हम डेकोरेटर्स के तर्क के रूप में देखते हैं। यहां पेस्ट करने के लिए बहुत अधिक कोड है, इसलिए इस फ़ंक्शन के कार्यान्वयन पर एक नज़र डालें ।