Tag: cpython
-
15. Danh sách, bộ dữ liệu và mảng
15. Danh sách, bộ dữ liệu và mảng Danh sách, bộ dữ liệu và các đối tượng giống như mảng biểu thị các bộ sưu tập có thứ tự. Tất cả chúng đều hỗ trợ quyền truy cập được lập chỉ mục, nhưng chúng có các mô hình lưu trữ, quy tắc có thể thay đổi và sự đánh đổi hiệu suất khác nhau. Danh sách là một chuỗi các…
-
2. Đối tượng và bộ nhớ
Chương Tiêu đề 7 Mô hình đối tượng Python 8 PyObject và PyVarObject 9 Đếm tham khảo 10 Người Thu Rác 11 Bộ cấp phát bộ nhớ 12 Bố cục đối tượng và loại vị trí 13 Triển khai đối tượng tích hợp 14 Chuỗi, byte và Unicode 15 Danh sách, bộ dữ liệu và mảng 16 Từ điển và Bộ 17 Số nguyên, số float và số phức
-
1. Định hướng
Chương Tiêu đề 1 CPython là gì 2 Xây dựng CPython từ nguồn 3 Bố cục kho lưu trữ 4 Đọc mã CPython C 5 Mô hình thời gian chạy 6 Từ mã nguồn đến thực thi
-
29. Thực thi dựa trên ngăn xếp
29. Thực thi dựa trên ngăn xếp CPython thực thi hầu hết mã byte bằng máy xếp chồng. Máy ngăn xếp sử dụng ngăn xếp toán hạng ngầm thay vì đặt tên rõ ràng cho các thanh ghi nguồn và đích trong mỗi lệnh. Trong CPython, ngăn xếp này thuộc về khung hiện tại. Nó lưu trữ các tham chiếu đến các đối tượng Python. Hướng dẫn mã byte đẩy…
-
31. Gọi hàm
31. Lệnh gọi hàm Lệnh gọi hàm là một trong những đường dẫn thực thi quan trọng nhất trong CPython. Một cuộc gọi kết nối nhiều hệ thống cùng một lúc: thực thi mã byte, khung, liên kết đối số, bộ mô tả, phương thức, bao đóng, API C, đếm tham chiếu, ngoại lệ và xử lý trả về. Một cuộc gọi đơn giản: python id="wauh11" result = f(1, 2)…
-
2. Xây dựng CPython từ nguồn
2. Xây dựng CPython từ nguồn Xây dựng CPython từ nguồn cung cấp cho bạn một trình thông dịch cục bộ mà bạn có thể kiểm tra, sửa đổi, gỡ lỗi và kiểm tra. Đây là bước thực tế đầu tiên trước khi đọc nội bộ một cách nghiêm túc. Bản dựng nguồn cho phép bạn thực hiện những việc mà bản cài đặt Python đóng gói thường ẩn:```text change…
-
4. Phiên dịch viên
Chương Tiêu đề 27 Vòng đánh giá 28 Khung 29 Thực thi dựa trên ngăn xếp 30 Hướng dẫn mã byte 31 Gọi hàm 32 Cuộc gọi phương thức 33 Tra cứu thuộc tính 34 Xử lý ngoại lệ 35 Máy phát điện 36 Coroutine và Async 37 Khớp mẫu 38 Hiểu biết 39 Đóng cửa và tế bào
-
28. Khung
#28. Khung Khung là bản ghi thời gian chạy cho một lần thực thi mã Python đang hoạt động. Khi CPython gọi một hàm Python, thực thi phần thân mô-đun, chạy phần thân lớp, tiếp tục trình tạo hoặc tiếp tục một coroutine, nó sẽ sử dụng bản ghi thực thi giống như khung để giữ trạng thái hiện tại. Một đối tượng mã cho biết những gì cần thực…
-
32. Cuộc gọi phương thức
32. Cuộc gọi phương thức Cuộc gọi phương thức là cuộc gọi hàm thường bắt đầu bằng quyền truy cập thuộc tính. Chúng là trung tâm của mô hình đối tượng của Python vì hầu hết hành vi của đối tượng được thể hiện thông qua các phương thức. Một cuộc gọi phương thức như: python id="l3owku" obj.method(arg) trông giống như một thao tác, nhưng CPython thực hiện một số…
-
37. Kết hợp mẫu
37. Khớp mẫu Khớp mẫu là hệ thống khớp cấu trúc của Python. Nó được thực hiện bởi match tuyên bố và case khoản.```python match value: case 0: result = "zero" case [x, y]: result = x + y case {"name": name}: result = name case _: result = None Ở c ấ p độ CPython , vi ệ c so kh ớ p m ẫ u đượ c bi…
-
42. Khóa nhập
42. Khóa nhập Khóa nhập là cơ chế đồng bộ hóa giúp ngăn chặn việc nhập đồng thời không an toàn. Trong CPython, việc nhập không chỉ là tra cứu tên. Họ có thể tạo các đối tượng mô-đun, thay đổi sys.modules , thực thi mã Python tùy ý, khởi tạo các mô-đun mở rộng, cập nhật thuộc tính gói, biên dịch tệp nguồn, đọc bộ đệm mã byte và…
-
34. Xử lý ngoại lệ
34. Xử lý ngoại lệ Xử lý ngoại lệ là hệ thống luồng điều khiển mà CPython sử dụng khi một thao tác không thể hoàn thành bình thường. Nó bao gồm rõ ràng raise câu lệnh, hoạt động không thành công, nhập không thành công, cuộc gọi không thành công, chấm dứt trình tạo, dọn dẹp trình quản lý bối cảnh, xây dựng truy nguyên và truyền bá qua…
-
44. Lớp học và siêu dữ liệu
44. Lớp và siêu lớp Một lớp là một đối tượng thời gian chạy tạo ra các thể hiện, lưu trữ các thuộc tính, tham gia kế thừa và xác định hành vi thông qua mô hình đối tượng Python. Trong CPython, một lớp là một đối tượng có kiểu thường là type . Siêu dữ liệu là lớp của một lớp. Nó kiểm soát cách các đối tượng lớp…
-
38. Sự hiểu biết
#38. Sự hiểu biết Sự hiểu biết là cú pháp nhỏ gọn để xây dựng các thùng chứa hoặc các trình vòng lặp giống như trình tạo từ một vòng lặp khác. CPython triển khai chúng dưới dạng đối tượng mã được biên dịch với phạm vi thực thi riêng. Các hình thức phổ biến: python [x * 2 for x in xs] {x * 2 for x in xs}…
-
7. Mô hình đối tượng Python
7. Mô hình đối tượng Python Mô hình đối tượng Python là nền tảng của CPython. Mọi thứ chạy trong Python cuối cùng đều trở thành một phép toán trên các đối tượng: số nguyên, chuỗi, danh sách, mô-đun, hàm, lớp, ngoại lệ, khung và thậm chí cả mã được biên dịch. Ở cấp độ ngôn ngữ, Python cho biết mọi đối tượng đều có nhận dạng, loại và giá…
-
16. Từ điển và bộ
16. Từ điển và Bộ Từ điển và bộ là các vùng chứa bảng băm chính của CPython. Một từ điển ánh xạ các khóa tới các giá trị. Một bộ lưu trữ các khóa không có giá trị liên quan. Chúng được sử dụng ở mọi nơi trong Python:```text id="cp7dx7" module globals class namespaces instance attributes keyword arguments function annotations import caches memoization tables membership indexes deduplication sets ##…
-
27. Vòng đánh giá
27. Vòng đánh giá Vòng đánh giá là công cụ thực thi trung tâm của CPython. Nó lấy một đối tượng mã được biên dịch, thực thi các lệnh mã byte của nó và tạo ra một kết quả hoặc một ngoại lệ. Ở mức độ cao, quá trình thực thi CPython trông như thế này:```text Python source ↓ tokens ↓ parser ↓ AST ↓ symbol table ↓ compiler ↓…
-
23. Đối tượng mã
23. Đối tượng mã Đối tượng mã là bản trình bày được biên dịch của CPython về mã Python thực thi. Nó chứa mã byte và siêu dữ liệu. Trình thông dịch có thể thực thi nó, nhưng bản thân đối tượng mã không mang trạng thái thời gian chạy như toàn cục, đối số mặc định, ô đóng hoặc phương thức bị ràng buộc. Đối với nguồn này: python…
-
1. CPython là gì
1. CPython là gì CPython là triển khai chính của ngôn ngữ lập trình Python. Đây là cách triển khai mà hầu hết mọi người sử dụng khi họ cài đặt Python từ python.org, trình quản lý gói, bản phân phối Linux, Homebrew, pyenv, hình ảnh Docker hoặc hầu hết các thời gian chạy trên đám mây. CPython có hai vai trò. Đầu tiên, nó triển khai ngôn ngữ Python.…
-
36. Coroutine và Async
36. Coroutine và Async Coroutine là các phép tính có thể tiếp tục được sử dụng cho lập trình không đồng bộ. Họ để mã Python tạm dừng ở mức await điểm, đưa điều khiển trở lại vòng lặp sự kiện và sau đó tiếp tục lại khi thao tác được chờ đợi có kết quả. Một coroutine tương tự như một trình tạo vì cả hai đều duy trì…
-
35. Máy phát điện
#35. Máy phát điện Máy phát điện là chức năng có thể tiếp tục. Một hàm bình thường bắt đầu, chạy và kết thúc với một giá trị trả về. Trình tạo có thể khởi động, tạo ra một giá trị, tạm dừng khung của nó, sau đó tiếp tục từ cùng một vị trí lệnh, tạo ra một giá trị khác và lặp lại cho đến khi kết thúc.…
-
19. Phân tích cú pháp
19. Phân tích cú pháp Phân tích cú pháp là giai đoạn biến luồng mã thông báo thành cấu trúc cú pháp. Trình mã thông báo nhận dạng các đơn vị từ vựng. Trình phân tích cú pháp nhận ra cấu trúc ngữ pháp. Nó quyết định xem một chuỗi mã thông báo có phải là chương trình Python hợp lệ hay không và khi nó hợp lệ sẽ xây…
-
18. Mã thông báo
18. Token hóa Mã thông báo là giai đoạn cấu trúc đầu tiên trong quy trình biên dịch của CPython. Nó nhận văn bản nguồn Python và tạo ra một luồng mã thông báo. Trình phân tích cú pháp sử dụng luồng mã thông báo đó và xây dựng cấu trúc cú pháp từ nó. Ở giai đoạn này, CPython vẫn chưa biết liệu một chương trình có ý nghĩa…
-
40. Mô-đun và nhập khẩu
40. Mô-đun và nhập khẩu Mô-đun là đơn vị tải mã cơ bản, cách ly không gian tên và tái sử dụng của Python. Trong CPython, mô-đun vừa là đối tượng cấp độ ngôn ngữ vừa là bản ghi thời gian chạy trong hệ thống nhập. Ở cấp độ Python, mô-đun là thứ bạn nhận được sau khi thực thi: python import math import os import json Mỗi tên đã…
-
33. Tra cứu thuộc tính
#33. Tra cứu thuộc tính Tra cứu thuộc tính là quá trình chạy được sử dụng để đánh giá các biểu thức như:```python id="5ob0m9" obj.name M ộ t bi ể u th ứ c thu ộ c t í nh đơ n gi ả n c ó th ể k í ch ho ạ t m ộ t l ượ ng l ớ n m á y m ó c…
-
3. Bố cục kho lưu trữ
3. Bố cục kho lưu trữ Kho lưu trữ CPython được tổ chức xung quanh các hệ thống con chính của trình thông dịch: triển khai đối tượng, bộ máy thời gian chạy, đường dẫn trình biên dịch, trình phân tích cú pháp, mô-đun tích hợp, thư viện chuẩn, kiểm tra, tài liệu và tệp xây dựng nền tảng. Cách tốt đầu tiên là coi cây nguồn như một bản…
-
9. Đếm tham chiếu
#9. Đếm tham khảo Tính tham chiếu là cơ chế quản lý bộ nhớ chính của CPython. Mỗi đối tượng thông thường đều mang một số lượng tham chiếu mạnh hiện đang trỏ đến nó. Khi số lượng đó giảm xuống 0, CPython có thể phá hủy đối tượng ngay lập tức. Thiết kế này là một trong những khác biệt rõ ràng nhất giữa CPython và nhiều thời gian…
-
21. Bảng ký hiệu
#21. Bảng ký hiệu Sau khi phân tích cú pháp tạo ra AST, CPython thực hiện phân tích phạm vi. Giai đoạn này xây dựng các bảng ký hiệu. Bảng ký hiệu ghi lại cách hoạt động của tên trong từng phạm vi. Nó xác định xem tên là cục bộ, toàn cầu, miễn phí, ô, tham số, được nhập, chú thích hay được tham chiếu từ phạm vi lồng…
-
10. Người thu gom rác
10. Người thu gom rác CPython sử dụng tính năng tham chiếu làm cơ chế quản lý bộ nhớ chính. Việc đếm tham chiếu sẽ phá hủy hầu hết các đối tượng ngay khi tham chiếu mạnh cuối cùng của chúng biến mất. Việc đếm tham chiếu có một hạn chế lớn: nó không thể tự lấy lại các chu kỳ tham chiếu. Trình thu gom rác tồn tại để…
-
13. Triển khai đối tượng tích hợp
13. Triển khai đối tượng tích hợp Các đối tượng tích hợp là cấu trúc dữ liệu cụ thể đằng sau các kiểu lõi của Python. Chúng là các đối tượng Python thông thường theo nghĩa là chúng có danh tính, loại, số lượng tham chiếu, thuộc tính được hỗ trợ và hành vi được xác định bởi các vị trí loại. Chúng đặc biệt vì việc lưu trữ và…
-
24. Hằng số, tên và địa phương
24. Hằng, Tên và Địa phương Đối tượng mã không lưu trữ mã nguồn Python dưới dạng văn bản. Nó lưu trữ các bảng nhỏ gọn và các hướng dẫn mã byte tham chiếu đến các bảng đó theo chỉ mục. Ba trong số các bảng quan trọng nhất là:```text id="mx2a9w" co_consts co_names co_varnames Đố i v ớ i ch ứ c n ă ng n à y : ```…
-
12. Bố cục đối tượng và loại vị trí
12. Bố cục đối tượng và loại slot CPython đại diện cho mọi giá trị thời gian chạy dưới dạng một đối tượng. Mỗi đối tượng có một bố cục bộ nhớ và loại của mỗi đối tượng mô tả cách diễn giải bộ nhớ đó. Bố cục đối tượng trả lời: text What fields exist inside this object? Where are the references to other Python objects? How large is…
-
20. AST
20. AST Cây cú pháp trừu tượng, thường được gọi là AST, là cách biểu diễn có cấu trúc của mã nguồn Python sau khi phân tích cú pháp. Trình mã thông báo tạo ra một dòng mã thông báo phẳng. Trình phân tích cú pháp nhận ra ngữ pháp. AST ghi lại kết quả dưới dạng cây câu lệnh và biểu thức. Đối với nguồn này: python x =…
-
14. Chuỗi, byte và Unicode
14. Chuỗi, byte và Unicode Dữ liệu văn bản và nhị phân là các họ đối tượng riêng biệt trong Python. str đại diện cho văn bản Unicode. bytes đại diện cho dữ liệu nhị phân bất biến. bytearray đại diện cho dữ liệu nhị phân có thể thay đổi. Sự tách biệt này là một trong những lựa chọn thiết kế thời gian chạy quan trọng nhất của Python…
-
8. PyObject và PyVarObject
8. PyObject Và PyVarObject PyObject Và PyVarObject là các bố cục cơ sở đằng sau các đối tượng CPython. Chúng không phải là lớp Python. Chúng là các quy ước cấu trúc cấp C cho phép bộ thực thi xử lý nhiều triển khai đối tượng khác nhau thông qua một kiểu con trỏ chung. Khi chạy, hầu hết các tham chiếu đối tượng trong CPython được biểu diễn dưới…
-
39. Đóng cửa và tế bào
39. Đóng cửa và ô Các bao đóng cho phép hàm lồng nhau sử dụng các biến từ hàm kèm theo sau khi hàm kèm theo đó trả về.```python def make_adder(n): def add(x): return x + n return add add10 = make_adder(10) print(add10(5)) Đầu ra: text 15 ```Biến n thuộc về make_adder , Nhưng add sau này vẫn sử dụng nó. CPython hỗ trợ điều này bằng cách di chuyển…
-
3. Đường dẫn biên dịch
Chương Tiêu đề 18 Mã thông báo 19 Phân tích cú pháp 20 AST 21 Bảng ký hiệu 22 Trình biên dịch 23 Đối tượng mã 24 Hằng số, tên và địa phương 25 Tạo mã byte 26 Tối ưu hóa mã byte
-
11. Bộ cấp phát bộ nhớ
11. Bộ cấp phát bộ nhớ CPython phân bổ bộ nhớ liên tục. Mọi đối tượng số nguyên, đối tượng danh sách, khung, bộ dữ liệu, mảng nhập lệnh, bộ đệm chuỗi, đối tượng mã, ngoại lệ, mô-đun và hàm đều cần bộ nhớ. Hệ thống phân bổ tồn tại để thực hiện các phân bổ này nhanh chóng, có cấu trúc, có thể sửa lỗi và di động trên…
-
6. Từ mã nguồn đến thực thi
6. Từ mã nguồn đến thực thi CPython không thực thi trực tiếp văn bản nguồn Python. Nó biến đổi văn bản nguồn thông qua một số biểu diễn bên trong trước khi lệnh mã byte đầu tiên chạy. Con đường là:```text source text ↓ tokens ↓ parse tree ↓ abstract syntax tree ↓ symbol table ↓ code object ↓ frame ↓ bytecode evaluation ↓ object operations ## 6.1 Văn…
-
22. Trình biên dịch
22. Trình biên dịch Trình biên dịch chuyển thông tin về bảng ký hiệu và AST thành đối tượng mã thực thi. Các giai đoạn trước trả lời các câu hỏi về cấu trúc.```text id="lfk0j9" tokenizer: What lexical units are in the source? parser: What syntax tree do these tokens form? symbol table: What scope does each name belong to? Trình biên dịch trả lời các câu hỏi thực thi.…
-
41. Gói
41. Gói hàng Một gói là một mô-đun có thể chứa các mô-đun khác. Trong CPython, gói không phải là một danh mục đối tượng riêng biệt. Nó vẫn là một đối tượng mô-đun, nhưng nó có siêu dữ liệu nhập cho hệ thống nhập biết nơi cần tìm các mô-đun con. Ở cấp độ Python, thư mục này có thể là một gói: text app/ __init__.py config.py server.py Bạn…
-
43. Mô tả
43. Bộ mô tả Bộ mô tả là một đối tượng kiểm soát quyền truy cập thuộc tính trên một đối tượng khác. Bộ mô tả là một trong những cơ chế chính đằng sau mô hình đối tượng của Python. Chúng giải thích cách các phương thức liên kết với các thể hiện, cách property hoạt động như thế nào staticmethod Và classmethod hoạt động, cách các khe hoạt…
-
5. Mô hình thời gian chạy
5. Mô hình thời gian chạy Thời gian chạy CPython là bộ máy tồn tại sau khi quá trình bắt đầu và trước khi mã Python kết thúc quá trình thực thi. Nó sở hữu trạng thái trình thông dịch, trạng thái luồng, mô-đun, nội dung, bộ cấp phát bộ nhớ, trạng thái ngoại lệ, trạng thái nhập, khung, cuộc gọi đang chờ xử lý, xử lý tín hiệu và…
-
17. Số nguyên, số float và số phức
17. Số nguyên, số float và số phức Các đối tượng số của Python là các đối tượng thông thường được triển khai chuyên biệt. Chúng tham gia vào cùng một mô hình đối tượng như danh sách, từ điển, hàm, lớp và mô-đun: mỗi giá trị có một tiêu đề đối tượng, một con trỏ kiểu, hành vi đếm tham chiếu và các vùng kiểu cho các phép toán.…
-
30. Hướng dẫn mã byte
30. Hướng dẫn mã byte Hướng dẫn mã byte là các hoạt động được thực hiện bởi vòng đánh giá CPython. Chúng là dạng mã Python nhỏ gọn, ở cấp độ trình thông dịch sau khi phân tích cú pháp, xây dựng AST, phân tích ký hiệu và biên dịch. Một hàm Python như:```python id="ya54lv" def add(a, b): return a + b B ạ n c ó th ể ki…
-
25. Tạo mã byte
25. Tạo mã byte Tạo bytecode là giai đoạn CPython chuyển đổi cú pháp có cấu trúc thành các hướng dẫn máy ảo có thể thực thi được. Trình phân tích cú pháp xây dựng AST. Bảng ký hiệu xác định hành vi phạm vi. Sau đó, trình biên dịch sẽ đưa ra các hướng dẫn mã byte triển khai ngữ nghĩa Python. Đối với nguồn này: python id="bjlwm8" def…
-
26. Tối ưu hóa mã byte
26. Tối ưu hóa mã byte Tối ưu hóa mã byte là giai đoạn dọn dẹp và sàng lọc cuối cùng trước khi đối tượng mã sẵn sàng thực thi. Các giai đoạn biên dịch trước đó quyết định ý nghĩa của chương trình và đưa ra hướng dẫn. Tối ưu hóa cố gắng làm cho các hướng dẫn đó nhỏ hơn, đơn giản hơn hoặc nhanh hơn trong khi…
-
4. Đọc mã CPython C
#4. Đọc mã CPython C Đọc mã CPython C yêu cầu hai mô hình tinh thần cùng một lúc. Mô hình đầu tiên là C thông thường: cấu trúc, con trỏ, macro, con trỏ hàm, quyền sở hữu tham chiếu, phân bổ, trả về lỗi và biên dịch có điều kiện. Mô hình thứ hai là mô hình thời gian chạy của Python: đối tượng, loại, khung, ngoại lệ, số…