2012-12-17 14 views
11

Ipython 0.13.1 có thể in nguồn của đối tượng từ thư viện python,
chẳng hạn như, os.path.abspath ??
Nhưng tôi không thể in mã nguồn của bất kỳ đối tượng nào tôi đã xác định thông qua phép thuật% ed trong ipython,
Tôi đã làm gì sai?
như, tôi xác định một tên lớp đến% ed kỳ diệu:cách in mã nguồn của đối tượng mà tôi đã xác định sử dụng% chỉnh sửa ma thuật

%ed 

sau đó

class Name(object): 
    """docstring for Name""" 
    name = 'hong' 
    def __init__(self, arg): 
     super(Name, self).__init__() 
     self.arg = arg 
    def pri(): 
     print 'class Name' 

khi trở lại ipython, tôi không thể xem mã nguồn của lớp Tên:

In [59]: Name?? 
Type:  type 
String Form:<class '__main__.Name'> 
Docstring: docstring for Name 
Constructor information: 
Definition:Name(self, arg) 

Đây có phải là lỗi của IPython không?

Trả lời

10

- Chỉnh sửa sau khi OP đề cập đến điều này được thấy trong ipython chính nó.

Có thông báo lỗi nào bạn nhận được sau khi nhập% ed myfunc không? Dán có thể giúp người khác tìm thấy vấn đề.

--- cập nhật:

Tôi cũng nhận được một phiên bản ngắn của mã nguồn khi tôi thử Tên ??, nhưng Name.pri ?? cung cấp cho tôi mã nguồn đầy đủ của hàm pri() của lớp Name. Vì vậy, ipython có thể có một số quy ước để không cung cấp mã nguồn đầy đủ của các lớp.

Đây là sự tương tác của tôi:

phiên bản
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]: 
+0

không sử dụng sổ ghi chép, tôi chỉ sử dụng vỏ IPython và tôi có nghĩa là sự cố trong vỏ IPython –

+0

ah, xin lỗi vì sự giám sát. Bây giờ tôi đã sửa đổi câu trả lời tìm kiếm các thông báo lỗi có thể giúp người khác giải quyết nó. –

+0

Cảm ơn, tôi đã chỉnh sửa lại. –

3

gần đây của IPython (không chắc chắn về số phiên bản chính xác) thực sự làm hiển thị các nguồn:

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 

Có hai cách khác để có được nguồn. Một là nếu bạn có thể quay lại dòng mà bạn gọi là %ed, giá trị trả về phải là mã nguồn (ở đây, đây là Out[1], vì vậy bạn có thể làm print Out[1]). Một cách khác là gọi %ed f - đây là nghĩa vụ phải tải định nghĩa hiện tại là f vào trình chỉnh sửa và cho phép bạn chỉnh sửa định nghĩa.

+0

định nghĩa chức năng chẳng hạn như 'def f (a): return a + 3', tôi cũng không gặp vấn đề gì. Bạn có thể def một đối tượng lớp để có một thử. IPython của tôi là v0.13.1. Cảm ơn –

+0

Ồ tôi hiểu rồi. Hấp dẫn. Vâng, có lẽ IPython không in ra nguồn cho các lớp học, nhưng thật không may là nó cũng không cho phép bạn '% ed' nó…. – illya

+0

Tôi cũng đã tìm thấy nó. Nhưng bạn có thể% ed toàn bộ lớp thông qua% ed chức năng của lớp, chẳng hạn như% ed Name.pri, mà tôi đã xác định trên câu hỏi ở trên. –