2009-04-22 9 views
9

की डुप्लीकेट पाने के लिए ..अजगर प्रतिबिंब - मैं इस का उपयोग कर सकते एक विधि परिभाषा के स्रोत कोड


मैं एक विधि परिभाषा है जो सफलता है पूरी तरह से चल रहा है, लेकिन इसे रनटाइम में संशोधित करना चाहते हैं।

उदाहरण के लिए

: मैं एक विधि

def sayHello(): 
    print "Hello" 

प्रकार (sayHello) मेरे इस सवाल का जवाब 'प्रकार समारोह' देता है। क्या मैं इस फ़ंक्शन ऑब्जेक्ट का स्रोत कोड स्ट्रिंग प्राप्त कर पाऊंगा। क्या इसे सुरक्षा समस्या माना जाता है?

+3

आप ऐसा नहीं कर सकते। डुप्लिकेट: http://stackoverflow.com/questions/427453/how-can-i-get-the-code-of-python- कार्यक्षमता; http://stackoverflow.com/questions/334851/print-the-code-which-defined-a-lambda-function; http://stackoverflow.com/questions/399991/python-how-do-you-get-python-to-write-down-the-code-of-a-function-it-has-in-memo –

+0

यह पायथन है : आपके पास पहले से ही स्रोत है। –

+3

मैं अधिक जानकारी के साथ एक और सवाल पूछने की दृढ़ता से अनुशंसा करता हूं। मुझे सबसे मजेदार भावना है कि आप वास्तव में क्या करना चाहते हैं केवल बंद करने/सजावट की आवश्यकता हो सकती है, लेकिन क्योंकि आपने जो कुछ भी पूछा है वह प्रिंट स्रोत कोड है (और इसे किसी भी तरह संशोधित करने का प्रयास करें) आपको निराशाजनक उत्तर मिल रहे हैं। –

उत्तर

2

sayHello.func_code.co_code एक स्ट्रिंग देता है जो मुझे लगता है कि विधि का संकलित कोड है। चूंकि पाइथन वर्चुअल मशीन बाइटकोड में कोड को आंतरिक रूप से संकलित कर रहा है, यह सब कुछ बाकी हो सकता है।

आप, यह एकत्रित न सकता है, हालांकि:

import dis 

def sayHello(): 
    print "hello" 

dis.dis(sayHello) 

यह प्रिंट:

 
    1   0 LOAD_CONST    1 ('hello') 
       3 PRINT_ITEM 
       4 PRINT_NEWLINE 
       5 LOAD_CONST    0 (None) 
       8 RETURN_VALUE 

एक de-संकलक के लिए Decompyle पर एक नज़र डालें।

0

फ़ंक्शन के स्रोत कोड प्राप्त करने के लिए कोई अंतर्निहित फ़ंक्शन नहीं है, हालांकि, यदि आप स्रोत-कोड तक पहुंच सकते हैं तो यह आपके स्वयं का निर्माण कर सकता है (यह आपके पायथन/lib निर्देशिका में होगा)।

import inspect 
import mymodule 
print inspect.getsource(mymodule.sayHello) 

समारोह एक मॉड्यूल है कि आप आयात में परिभाषित किया जाना चाहिए:

17

निरीक्षण मॉड्यूल का उपयोग करें।

संबंधित मुद्दे

 संबंधित मुद्दे