2011-12-22 31 views

Trả lời

71

Vì Python là mã nguồn mở, bạn có thể đọc số source code.

Để tìm hiểu tệp nào mô-đun hoặc chức năng cụ thể được triển khai trong bạn thường có thể in thuộc tính __file__. Ngoài ra, bạn có thể sử dụng mô-đun inspect, xem phần Retrieving Source Code trong tài liệu của inspect.

Đối với các lớp và phương thức tích hợp, điều này không đơn giản như vậy kể từ inspect.getfileinspect.getsource sẽ trả về lỗi loại cho biết đối tượng được tích hợp sẵn. Tuy nhiên, nhiều kiểu tích hợp có thể được tìm thấy trong Objects sub-directory of the Python source trunk. Ví dụ: xem here để thực hiện lớp liệt kê hoặc here để triển khai loại list.

+0

Bạn có thể đưa ra ví dụ với 'liệt kê' không? – Benjamin

+2

Bạn có thể xem xét cách tích hợp liệt kê được kiểm tra [ở đây] (http://hg.python.org/cpython/file/b36cb4602e21/Lib/test/test_enumerate.py). – Makoto

+3

mã liệt kê là [ở đây] (http://svn.python.org/view/python/trunk/Objects/enumobject.c?view=markup) –

14

Vỏ iPython làm việc này dễ dàng: function? sẽ cung cấp cho bạn tài liệu. function?? cũng hiển thị mã. NHƯNG này chỉ hoạt động cho các hàm python tinh khiết.

Sau đó, bạn luôn có thể download mã nguồn cho (c) Python.

Nếu bạn quan tâm đến việc triển khai pythonic chức năng cốt lõi, hãy xem tại nguồn PyPy.

+1

PyPy sử dụng RPython cho hầu hết các công cụ tích hợp sẵn, có thể gần như ở mức độ thấp như C đến gần như cấp cao như Python. Thông thường nó ở giữa. Trong cả hai trường hợp, nó được gõ tĩnh, vì vậy nó không thực sự là Python. – delnan

+0

Xem dự án ban đầu để xem mã nguồn của hàm dựng sẵn: https://github.com/punchagan/cinspect – Thomas

20

Đây là một câu trả lời sách dạy nấu ăn để bổ sung @ Chris câu trả lời, CPython đã chuyển sang GitHub và repo Mercurial sẽ không còn được cập nhật:

  1. Cài đặt Git nếu cần thiết.
  2. git clone https://github.com/python/cpython.git

  3. Mã sẽ kiểm đến một thư mục con gọi là cpython ->cd cpython

  4. Hãy nói rằng chúng tôi đang tìm kiếm định nghĩa của print() ...
  5. egrep --color=always -R 'print' | less -R
  6. Aha! Xem Python/bltinmodule.c ->builtin_print()

Thưởng thức.

4

bạn chỉ cần sử dụng lệnh help() để được trợ giúp về các chức năng nội trang cũng như mã của nó.

cho ví dụ: nếu bạn muốn xem mã cho str(), chỉ cần gõ - help(str)

nó sẽ trở lại như thế này,

>>> help(str) 
Help on class str in module __builtin__: 

class str(basestring) 
| str(object='') -> string 
| 
| Return a nice string representation of the object. 
| If the argument is a string, the return value is the same object. 
| 
| Method resolution order: 
|  str 
|  basestring 
|  object 
| 
| Methods defined here: 
| 
| __add__(...) 
|  x.__add__(y) <==> x+y 
| 
| __contains__(...) 
|  x.__contains__(y) <==> y in x 
| 
| __eq__(...) 
|  x.__eq__(y) <==> x==y 
| 
| __format__(...) 
|  S.__format__(format_spec) -> string 
| 
|  Return a formatted version of S as described by format_spec. 
| 
| __ge__(...) 
|  x.__ge__(y) <==> x>=y 
| 
| __getattribute__(...) 
-- More -- 
2

enter image description here

tôi đã phải đào một chút để tìm nguồn sau đây của Built-in Functions khi tìm kiếm sẽ mang lại hàng ngàn kết quả. (Chúc may mắn tìm kiếm bất kỳ của những để tìm nơi nó là mã nguồn được)

Dù sao, tất cả những chức năng được quy định tại bltinmodule.c Chức năng bắt đầu với builtin_{functionname}

Built-in Nguồn: https://github.com/python/cpython/blob/master/Python/bltinmodule.c

2

Khá một tài nguyên không xác định là Python Developer Guide.

Trong (một số) gần đây GH issue, một chương mới đã được thêm để giải quyết câu hỏi bạn đang yêu cầu: CPython Source Code Layout. Nếu có điều gì đó thay đổi, tài nguyên đó cũng sẽ được cập nhật.

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