在 IPython 会话中,我通常定义自定义函数...问题是,有时我想查看这些函数的实际代码。到目前为止,我还没有找到一种方法来显示它。使用 ?和 ??只返回“动态生成的函数。没有可用的源代码。” 有没有办法显示用户定义函数的源代码?
问问题
878 次
4 回答
2
我正在使用 python 2.7.4 和 iPython 0.13.2。
我可以在函数名称前使用 iPython 中的动态创建函数的来源??
:
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 中使用?你用的是什么版本?
于 2013-09-29T17:54:51.830 回答
2
尝试搜索历史:
In [22]: for l in _ih:
....: if l.startswith('def f'):
....: print l
....:
....:
def f():
a= 1
b = 2
return a*b
虽然这是非常基本的,但更好的版本会解析/运行历史记录并查看是否可以取回函数
于 2012-04-18T18:09:29.193 回答
2
如果您正在寻找交互式定义函数的来源,您可以在 iPython 的历史中找到它的最新定义:
[i for (i, l) in enumerate(_ih) if l.startswith('def foo(')][-1]
然后您可以编辑该行:
%edit 42
它将打开记事本或其他包含函数定义的文本编辑器。
或者您可以保存到文件:
%save foo.py 42
于 2012-04-18T18:10:23.750 回答
0
在以下情况下,IPython 中的函数被认为是动态生成的:
它们是元编程的——它们是由另一个函数创建的。在这种情况下,没有源代码,它根本不存在。
它们在创建它们的不同命名空间中被引用,并且没有关于它们最初位于哪个命名空间的信息。在这种情况下,找出它们最初的位置并运行?从那里。
于 2013-09-29T19:17:15.633 回答