2012-04-18 14 views
7

आईपीथॉन सत्र में, मैं आमतौर पर कस्टम फ़ंक्शंस को परिभाषित करता हूं ... समस्या यह है कि कभी-कभी मैं इन कार्यों के लिए वास्तविक कोड देखना चाहता हूं। अब तक, मैं इसे प्रदर्शित करने का कोई तरीका नहीं ढूंढ पाया है। उपयोग करना तथा ?? बस "गतिशील रूप से जेनरेट किया गया फ़ंक्शन" देता है। कोई स्रोत कोड उपलब्ध नहीं है। " उपयोगकर्ता द्वारा परिभाषित कार्यों के लिए स्रोत कोड प्रदर्शित करने का कोई तरीका है?आईपीथॉन में गतिशील रूप से बनाए गए ("कस्टम") फ़ंक्शन के लिए स्रोत कोड कैसे दिखाएं?

+0

फ़ंक्शन "कस्टम" क्या बनाता है? क्या आप कुछ स्रोत प्रदान कर सकते हैं जो इंगित करता है कि आप उन्हें कैसे बना रहे हैं? – kindall

+0

कुछ की तरह: 'डीईएफ़ blah (घ, ख): वापसी (घ> 10 और ख <10)' (, इंटरएक्टिव रूप से परिभाषित खेद बेहतर होता) –

+2

IPython का कौन-सा संस्करण है? हाल के संस्करणों में, 'एफ ??' इंटरैक्टिव रूप से परिभाषित कार्यों पर काम करता है। –

उत्तर

2

कोशिश खोज इतिहास:

In [22]: for l in _ih: 
    ....:  if l.startswith('def f'): 
    ....:   print l 
    ....:   
    ....:   
def f(): 
    a= 1 
    b = 2 
    return a*b 

हालांकि यह बहुत ही बुनियादी है, एक बेहतर संस्करण पार्स होगा/चलाने इतिहास और यदि आप एक समारोह वापस

2

प्राप्त कर सकते हैं देखते हैं आप देख रहे हैं के लिए स्रोत के लिए

[i for (i, l) in enumerate(_ih) if l.startswith('def foo(')][-1] 

तो फिर तुम उस लाइन संपादित कर सकते हैं: एक सहभागी-निर्धारित फ़ंक्शन, आप IPython के इतिहास में यह सबसे हाल ही में परिभाषा पा सकते हैं

%edit 42 

यह नोटपैड या फ़ंक्शन परिभाषा के साथ एक अन्य टेक्स्ट एडिटर खोल देगा।

या आप एक फाइल करने के लिए बचा सकते हैं:

%save foo.py 42 
+0

यह काम करता है, हालांकि इस विशिष्ट मामले में मैंने% पेस्ट का उपयोग किया था, इसलिए यह दिखाया गया था कि उस रेखा के लिए जादू पेस्ट कमांड था। अच्छा समाधान अन्यथा –

2

मैं अजगर 2.7.4 और IPython 0.13.2 उपयोग कर रहा हूँ।

In [8]: ??sort_words 
Type:  function 
String Form:<function sort_words at 0x189b938> 
File:  /tmp/ipython_edit_yc1TIo.py 
Definition: sort_words(s) 
Source: 
def sort_words(s): 
    x = re.findall(r'\W+(\w+)', s) 
    x.sort() 
    for i in x: 
     print i 

हो सकता है कि यह अब IPython के नए संस्करण में उपलब्ध है:

मैंने पहले समारोह नाम ?? का उपयोग कर IPython में एक डायनामिक रूप से तैयार समारोह का स्रोत देख सकते हैं? आप कौन सा संस्करण उपयोग कर रहे हैं?

+0

हाँ यह सही है; मैंने इस सवाल से पूछा कि (मुझे लगता है) 0.12 स्थिर संस्करण नहीं था, और यह 0.11 में उपलब्ध नहीं था। प्रश्न –

0

IPython में Fumctions माना गतिशील रूप से उत्पन्न कर रहे हैं:

  • वे metaprogrammed कर रहे हैं - वे किसी अन्य समारोह द्वारा बनाई गई हैं। इस मामले में थर्म कोई स्रोत कोड नहीं है, यह बस अस्तित्व में नहीं है।

  • उन्हें एक अलग नामस्थान में संदर्भित किया गया है, जिस पर उन्हें बनाया गया था और इस बारे में कोई जानकारी नहीं है कि वे मूल रूप से किस नामस्थान में हैं। इस मामले में पता लगाएं कि वे मूल रूप से कहां थे और चल रहे थे ?? वहां से।

+0

पर थॉमस के की टिप्पणी देखें मुझे यकीन नहीं है कि मैं आपके "मेटा-प्रोग्राम किए गए" मामले को समझता हूं: आईपीथन 1.1 में।0, कोई अन्य फ़ंक्शन ('def f(): def g(): ... g g =) के अंदर बनाए गए फ़ंक्शंस के कोड के साथ देख सकता है। – EOL