Ipython 0.13.1可以从python库打印对象的来源,
例如,os.path.abspath ??
但我不能打印我在ipython中通过%ed magic定义的任何对象的源代码,
我做错了什么?
比如,我通过%ed magic定义一个类名:
%ed
然后
class Name(object):
"""docstring for Name"""
name = 'hong'
def __init__(self, arg):
super(Name, self).__init__()
self.arg = arg
def pri():
print 'class Name'
回到ipython时,我看不到类Name的源代码:
In [59]: Name??
Type: type
String Form:<class '__main__.Name'>
Docstring: docstring for Name
Constructor information:
Definition:Name(self, arg)
这是IPython的错误吗?
答案 0 :(得分:10)
- OP提到的编辑可以在ipython iteself中看到。
在排除%ed myfunc之后是否有任何错误消息?粘贴可能有助于其他人找到问题。
---更新:
当我尝试Name ??时,我也得到了源代码的简短版本,但Name.pri ??给我一个Name类的pri()成员函数的完整源代码。所以ipython可能有一些约定,不能提供类的完整源代码。
这是我的互动:
In [2]: Name??
Type: type
String Form:<class '__main__.Name'>
Docstring: docstring for Name
Constructor information:
Definition:Name(self, arg)
In [3]: Name.pri??
Type: instancemethod
String Form:<unbound method Name.pri>
File: /tmp/ipython_edit_8YOfN9.py
Definition: Name.pri()
Source:
def pri():
print 'class Name'
In [4]:
答案 1 :(得分:3)
最新版本的IPython(不确定确切的版本号)确实显示了源代码:
IPython 0.13 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.
In [1]: %ed
IPython will make a temporary file named: /var/folders/88/zgy_z51x1fn2mp_7vmkj3phm0000gn/T/ipython_edit_g9xYY4.py
Editing... done. Executing edited code...
Out[1]: 'def f(a):\n\treturn a + 3\n'
In [2]: f(4)
Out[2]: 7
In [3]: f??
Type: function
String Form:<function f at 0x18ddb30>
File: /var/folders/88/zgy_z51x1fn2mp_7vmkj3phm0000gn/T/ipython_edit_g9xYY4.py
Definition: f(a)
Source:
def f(a):
return a + 3
还有另外两种获取源的方法。一种情况是,如果您可以返回到您调用%ed
的行,则返回值应为源代码(此处为Out[1]
,因此您可以执行print Out[1]
)。另一个是调用%ed f
- 这应该将当前的f
定义加载到编辑器中,并允许您编辑定义。