在交互式shell中显示功能定义

Cou*_*xer 12 python shell

我正在使用Python Interactive Shell(Windows XP下的ActiveState ActivePython 2.6.4).我创建了一个能够实现我想要的功能.但是,我已经清除了屏幕,因此我无法返回查看功能定义.它也是一个多线函数,因此重新显示行的向上箭头具有最小值.反正有没有返回函数的实际代码?dir()显示" code "和"func_code"属性,但我不知道它们是否包含我需要的内容.

Ale*_*lli 11

不,__code__并且func_code是对已编译的字节码的引用 - 您可以反汇编它们(请参阅参考资料dis.dis),但不能回到Python源代码.

唉,源代码已经消失了,在任何地方都没有记住......:

>>> import inspect
>>> def f():
...   print 'ciao'
... 
>>> inspect.getsource(f)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/inspect.py", line 694, in getsource
    lines, lnum = getsourcelines(object)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/inspect.py", line 683, in getsourcelines
    lines, lnum = findsource(object)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/inspect.py", line 531, in findsource
    raise IOError('could not get source code')
IOError: could not get source code
>>> 
Run Code Online (Sandbox Code Playgroud)

如果inspect不能达到它,这是一个非常指示性的标志.

如果你在使用GNU的平台上readline(基本上,除了 Windows 之外的任何平台),你可能会利用这样一个事实:readline它本身确实记住了一些"历史"并且可以把它写出来一个文件......:

>>> readline.write_history_file('/tmp/hist.txt')
Run Code Online (Sandbox Code Playgroud)

然后读取该历史文件 - 但是,我知道在Windows中无法做到这一点.

您可能希望使用具有更好内存功能的IDE,而不是"原始"命令解释器,尤其是在Windows等平台上.