Có cách nào để xem các hàm tích hợp hoạt động trong python không? Tôi không có ý chỉ sử dụng chúng, mà còn được xây dựng như thế nào, mã đằng sau được sắp xếp hoặc liệt kê, v.v ...?
Có cách nào để xem các hàm tích hợp hoạt động trong python không? Tôi không có ý chỉ sử dụng chúng, mà còn được xây dựng như thế nào, mã đằng sau được sắp xếp hoặc liệt kê, v.v ...?
Câu trả lời:
Vì Python là mã nguồn mở nên bạn có thể đọc mã nguồn .
Để tìm ra tập tin mà một mô-đun hoặc chức năng cụ thể được triển khai trong bạn thường có thể in __file__
thuộc tính. Ngoài ra, bạn có thể sử dụng inspect
mô-đun, xem phần Lấy mã nguồn trong tài liệu của inspect
.
Đối với các lớp và phương thức dựng sẵn, điều này không đơn giản vì inspect.getfile
và inspect.getsource
sẽ trả về một lỗi loại cho biết đối tượng được tích hợp sẵn. Tuy nhiên, nhiều kiểu dựng sẵn có thể được tìm thấy trong Objects
thư mục con của trung kế nguồn Python . Ví dụ, xem ở đây để thực hiện lớp liệt kê hoặc ở đây để thực hiện list
kiểu.
sorted()
là trong /Python/bltinmodule.c mặc dù nó chỉ gọi list.sort()
nên nguồn thực sự nằm trong /Objects/listobject.c
Dưới đây là câu trả lời của sách dạy nấu ăn để bổ sung cho câu trả lời của @Chris, CPython đã chuyển sang GitHub và kho lưu trữ Mercurial sẽ không còn được cập nhật:
git clone https://github.com/python/cpython.git
Mã sẽ kiểm tra thư mục con được gọi là cpython
->cd cpython
print()
...egrep --color=always -R 'print' | less -R
Python/bltinmodule.c
->builtin_print()
Thưởng thức.
Tôi đã phải đào một ít để tìm ra nguồn sau đây Built-in Functions
vì việc 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ỳ ai trong số những người tìm thấy nguồn gốc của nó)
Dù sao, tất cả các chức năng được xác định trong bltinmodule.c
Chức năng bắt đầu bằngbuiltin_{functionname}
Nguồn tích hợp: https://github.com/python/cpython/blob/master/Python/bltinmodule.c
Đối với các loại tích hợp: https://github.com/python/cpython/tree/master/Objects
listobject.c
github.com/python/cpython/tree/master/Objects
Các ipython vỏ làm cho điều này dễ dàng: function?
sẽ cung cấp cho bạn các tài liệu hướng dẫn. function??
cũng hiển thị mã. NHƯNG điều này chỉ hoạt động cho các chức năng python thuần.
Sau đó, bạn luôn có thể tải xuống mã nguồn cho (c) Python.
Nếu bạn quan tâm đến việc triển khai pythonic của chức năng cốt lõi, hãy xem nguồn PyPy .
2 phương pháp,
help()
inspect
1) kiểm tra:
sử dụng mô-đun inpsect để khám phá mã bạn muốn ... LƯU Ý: bạn chỉ có thể khám phá mã cho các mô-đun (aka) gói bạn đã nhập
ví dụ:
>>> import randint
>>> from inspect import getsource
>>> getsource(randint) # here i am going to explore code for package called `randint`
2) giúp ():
bạn chỉ có thể sử dụng help()
lệnh để nhận trợ giúp về các hàm dựng sẵn cũng như mã của nó.
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 --
Một tài nguyên không xác định là Hướng dẫn dành cho nhà phát triển Python .
Trong một vấn đề GH (gần như) gần đây , một chương mới đã được thêm vào để giải quyết câu hỏi bạn đang hỏi: Bố cục mã nguồn CPython . Nếu một cái gì đó nên thay đổi, tài nguyên đó cũng sẽ được cập nhật.
Như được đề cập bởi @Jim, tổ chức tệp được mô tả ở đây . Tái sản xuất để dễ khám phá:
Đối với các mô-đun Python, bố cục điển hình là:
Lib/<module>.py Modules/_<module>.c (if there’s also a C accelerator module) Lib/test/test_<module>.py Doc/library/<module>.rst
Đối với các mô-đun chỉ mở rộng, bố cục điển hình là:
Modules/<module>module.c Lib/test/test_<module>.py Doc/library/<module>.rst
Đối với các loại dựng sẵn, bố cục điển hình là:
Objects/<builtin>object.c Lib/test/test_<builtin>.py Doc/library/stdtypes.rst
Đối với các hàm dựng sẵn, bố cục điển hình là:
Python/bltinmodule.c Lib/test/test_builtin.py Doc/library/functions.rst
Một số trường hợp ngoại lệ:
builtin type int is at Objects/longobject.c builtin type str is at Objects/unicodeobject.c builtin module sys is at Python/sysmodule.c builtin module marshal is at Python/marshal.c Windows-only module winreg is at PC/winreg.c
enumerate
?