2013-12-18 15 views
10

Đối với mục đích giảng dạy Tôi muốn một sổ tay IPython hiển thị (như đầu ra từ một ô) mã nguồn chức năng, nhưng tôi muốn có thể tham khảo điều này trong nhiều sổ ghi chép. Do đó, tôi muốn hiển thị mã chức năng, theo cách tương tự để sử dụng ma thuật % psource, nhưng cú pháp thích hợp được tô sáng.Cách hiển thị mã nguồn của một chức năng gói trong sổ tay IPython

Đây là câu hỏi tương tự với this question, nhưng tôi muốn có thể áp dụng nó vào một hàm duy nhất trong một tệp, thay vì tệp hoàn chỉnh cùng một lúc.

Sử dụng những gợi ý từ câu hỏi trước tôi bị hack một mã ngắn mà làm việc trong các trường hợp đơn giản:

def print_source(module, function): 
    """For use inside an IPython notebook: given a module and a function, print the source code.""" 
    from inspect import getmembers, isfunction, getsource 
    from pygments import highlight 
    from pygments.lexers import PythonLexer 
    from pygments.formatters import HtmlFormatter 
    from IPython.core.display import HTML 

    internal_module = __import__(module) 

    internal_functions = dict(getmembers(internal_module, isfunction)) 

    return HTML(highlight(getsource(internal_functions[function]), PythonLexer(), HtmlFormatter(full=True))) 

Hai câu hỏi:

  1. This gist cho thấy cho thấy toàn bộ chức năng có thể được thực hiện bằng cách định nghĩa ma thuật tế bào thích hợp. Có thể xác định một ma thuật tế bào thích hợp để chỉ hiển thị một hàm duy nhất, như trên không?
  2. Có cách nào để thực hiện việc này mà không cần nhập toàn bộ mô-đun hay cách mạnh mẽ hơn để thực hiện việc này không?

Trả lời

5

1) Ma thuật chỉ là chức năng đơn giản không khó xác định, bạn có thể xem hereCustomizing IPython - Config.ipynb nếu tôi nhớ chính xác. Tôi vẫn không chắc chắn nó là giá trị definig một phép thuật trong trường hợp của bạn.

2) Phần lớn thời gian, không. Bạn phải nhập các mô-đun như chúng ta cần mã sống để biết nơi nó được xác định.

Nói chung, việc tìm mã của hàm không phải lúc nào cũng dễ dàng. Trên python 3 bạn luôn có thể truy cập đối tượng mã, nhưng hầu hết thời gian, ngay sau khi bạn có những thứ như chức năng trang trí, hoặc chức năng tạo động, nó trở nên khó khăn. Tôi cho rằng bạn cũng có thể truyền cảm hứng từ psource/ và yêu cầu họ trả lại thông tin thay vì phân trang.

Các vấn đề liên quan