Ipython 如何使用%edit magic打印我定义的对象的源代码
Ipython 0.13.1可以打印python库中对象的源代码,Ipython 如何使用%edit magic打印我定义的对象的源代码,ipython,Ipython,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(Na
例如,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时,我看不到类名的源代码:
In [59]: Name??
Type: type
String Form:<class '__main__.Name'>
Docstring: docstring for Name
Constructor information:
Definition:Name(self, arg)
[59]中的:名称??
类型:类型
字符串形式:
Docstring:Name的Docstring
建造商资料:
定义:名称(self,arg)
这是IPython的bug吗?--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]:
[2]中的:名称??
类型:类型
字符串形式:
Docstring:Name的Docstring
建造商资料:
定义:名称(self,arg)
在[3]:Name.pri??
类型:instancemethod
字符串形式:
文件:/tmp/ipython\u edit\u 8YOfN9.py
定义:Name.pri()
资料来源:
def pri():
打印“类名”
在[4]中:
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
ipython0.13——一种增强的交互式Python。
? -> 介绍和概述IPython的功能。
%快速参考->快速参考。
帮助->Python自己的帮助系统。
对象?->有关“对象”的详细信息,请使用“对象??”获取更多详细信息。
在[1]中:%ed
IPython将创建一个名为:/var/folders/88/zgy_z51x1fn2mp_7vmkj3phm0000gn/T/IPython_edit_g9xYY4.py的临时文件
编辑。。。完成。正在执行已编辑的代码。。。
输出[1]:'def f(a):\n\t返回a+3\n'
In[2]:f(4)
Out[2]:7
在[3]:f??
类型:功能
字符串形式:
文件:/var/folders/88/zgy_z51x1fn2mp_7vmkj3ph0000gn/T/ipython_edit_g9xYY4.py
定义:f(a)
资料来源:
定义f(a):
返回a+3
还有两种方法可以获取源代码。一个是,如果您可以返回调用
%ed
的行,返回值应该是源代码(这里是Out[1]
,因此您可以执行打印[1]
)。另一种方法是调用%ed f
-这应该是将f
的当前定义加载到编辑器中,并允许您编辑定义。不使用笔记本,我只使用IPython shell,我是指IPython shellah中的问题,抱歉疏忽。我现在修改了答案,寻找可能有助于其他人解决问题的错误消息。函数定义,例如您的def(a):返回a+3,我也没有问题。你能定义一个类对象来尝试一下吗。我的IPython是v0.13.1。谢谢,我明白了。有趣。是的,也许IPython没有打印类的源代码,但不幸的是,它也不允许您%ed
它……我也找到了它。但是您可以通过%ed类的函数来%ed整个类,例如我在上面的问题上定义的%ed Name.pri。