1. Giới thiệu - duykieu/python-doc GitHub Wiki
Tài liệu tham khảo này mô tả về ngôn ngữ Python. Đây không phải là các hướng dẫn nhé.
Trong khi tôi cố gắng tóm lược ngắn gọn nhất có thể, tôi chọn Tiếng Anh hơn là các thông số kỹ thuật chính thức cho mọi thứ trừ các phân tích cú pháp và từ vựng. Điều này làm cho tài liệu trở nên dễ hiểu hơn cho các đọc giả ở trình độ trung bình, nhưng cũng chừa chỗ cho sự mơ hồ. Hậu quả là nếu bạn đến từ Sao Hoả và cố gắng làm lại ngôn ngữ này từ tài liệu này một mình, bạn có thể phải đoán mọi thứ và sự thật là có lẽ bạn biến chúng thành một ngôn ngữ hoàn toàn khác. Mặt khác nếu bạn sử dụng Python và tự hỏi rằng các quy tắc tóm lược ở một góc độ nào đó là gì thì tài liệu này sẽ dành cho bạn. Nếu bạn muốn biết định nghĩa chính thức về ngôn ngữ, có thể bạn sẽ lãng phí thời gian của mình, hoặc phát minh ra một cổ máy nhân bản (ko hiểu lắm).
Sẽ rất nguy hiểm nếu thêm quá nhiều các ví dụ chi tiết vào một tài liệu tham khảo, các ví dụ có thể sẽ thay đổi trên các trình thực thi khác nhau ở cùng một ngôn ngữ và chúng sẽ làm việc khác nhau. Mặt khác CPython là một cách triển khai được sử dụng rộng rãi (mặc dù các cách triển khai thay thế khác tiếp tục được hỗ trợ) và những điều kỳ quặc đặc biệt đôi khi được nhắc đến nhiều, đặc biệt khi việc triển khai áp đặt thêm các hạn chế. Vì vậy, bạn sẽ thấy những "chú ý khi triển khai" khắp tài liệu.
Mỗi trình thực thi Python đi kèm với một số module tích hợp chuẩn. Có một tài liệu mang tên The Python Standard Library. Một vài module tích hợp sẽ được nhắc đến khi chúng tương tác trong một nghĩa nào đó với định nghĩa ngôn ngữ.
Mặc dù trình thực thi bằng Python được sử dụng nhiều nhất, tuy nhiên có những các triển khai thay thế khác được yêu thích đặc biệt ở một số đối tượng khác.
Các trình thực thi được biết đến bao gồm:
CPython
- Đây là phiên bản gốc và được duy trì nhiều nhất, viết bằng C. Các tính năng mới thường được xuất hiện ở đây đầu tiên.
Jython
- Trình thực thi Python trong Java. Bản triển khai này có thể sử dụng như một ngôn ngữ kịch bản cho ứng dụng Java hoặc có thể được dùng viết các ứng dụng sử dụng thư viện lớp của Java. Nó cũng thường được dùng để viết test cho các thư viện Java. Thông tin thêm có thể tìm trên website Jython
Python for .NET
- Trình thực thi này thực chất dùng CPython, nhưng là một ứng dụng quản trị .NET và làm cho các thư viện .NET có thể sẵn sàng để sử dụng. Nó được tạo ra bởi Brian Lloyd. Thông tin chi tiết có thể xem trên trang chủ của Python for .NET.
IronPython
- Một phiên bản thay thế khác cho .NET. Không giống như Python.NET, đây là một trình thực thi hoàn chỉnh tạo nên IL, và biên dịch thẳng code Python thành ngôn ngữ bậc thấp. Nó được tạo ra bởi Jim Hugunin, người này cũng là tác giả của Jthon. Thông tin chi tiết tại đây.
PyPy
- Trình thực thi này được viết hoàn toàn bằng Python. Nó hỗ trợ một số tính năng nâng cao mà không có trong các trình thực thi khác như hỗ trợ stackless và biên dịch Just in Time. Một trong các mục tiêu của dự án là khuyến nghị thử nghiệm với chính ngôn ngữ mà nó được viết ra (ở đây là Python). Thông tin thêm tại đây.
Mỗi một cách thực thi sẽ khác nhau theo cách nào đó từ ngôn ngữ cũng như tài liệu này, hoặc giới thiệu một thông tin cụ thể nào đó ngoài tài liệu chuẩn của Python. Vì vậy hãy tham khảo chính xác và cụ thể những gì mà bạn muốn.
Các mô tả về phân tích từ vựng và cú pháp sử dụng ký hiệu ngữ pháp BNF đã sửa đổi theo phong cách như sau:
name ::= lc_letter (lc_letter | "_")*
lc_letter ::= "a"..."z"
Dòng đầu tiên cho biết rằng một name
là một lc_letter
theo sau bởi một 0 hoặc nhiều hơn một lc_letter
hoặc gạch chân (underscore). Một lc_letter
lần lượt là bất kỳ ký tự nào từ 'a'
đến 'z'
. (Quy tắc này thực ra được tuân thủ cho các tên được xác định trong quy tắc từ vựng và ngữ pháp trong tài liệu này).
Mỗi quy tắc bắt đầu với một tên (đó là tên được định nghĩa bởi quy tắc) và ký hiệu ::=
. một gạch đứng (\
) được dùng để ngăn cách thay thế; đó là toán tử ràng buộc ít nhất trong ký hiệu này. Một dấu sao (*
) nghĩa là 0 hoặc nhiều lần lặp lại của đối tượng phía trước; Tương tự như vậy, một dấu cộng (+
) nghĩa là một hoặc nhiều lần lặp lại, và một cụm từ kèm bên trong dấu ngoặc vuông ([ ]
) nghĩa là 0 hoặc một lần xảy ra (nói cách khác, cụm từ kèm theo này là tuỳ chọn). Dấu *
và +
sẽ liên kết càng chặt chẽ càng tốt; ngoặc đơn dùng để nhóm. Chuỗi ký tự được kèm trong dấu ngoặc kép. Khoảng cách chỉ có ý nghĩa để phân cách cú pháp. Quy tắc thường nằm trên cùng một dòng; quy tắc có nhiều cách thay thế, có thể được định dạng thay thế với mỗi dòng sau dòng đầu tiên với dấu ngăn cách đứng.
Trong các định nghĩa từ vựng (như ví dụ trên), hai quy ước nữa được sử dụng: Hai chuỗi ký tự ngăn cách bởi dấu ba chấm nghĩa là một lựa chọn trong số các ký tự trong khoảng được cho. Một cụm từ nằm giữa hai dấu ngoặc nhọn (<...>
) cho biết chú thích chính thức của ký hiệu được định nghĩa. Ví dụ: điều này có thể được sử dụng để mô tả khái niệm "ký tự điều khiển", nếu cần.
Mặc dù các ký hiệu được sử dụng hầu hết là giống nhau, nhưng cũng có những khác biệt lớn giữa nghĩa của từ vựng và định nghĩa cú pháp: một định nghĩa từ vựng hoạt động trên các ký tự riêng lẻ của đầu vào, trong khi định nghĩa cú pháp hoạt động trên luồng mã thông báo được tạo bởi phân tích từ vựng. Tất cả cách dùng của BNF trong chương tiếp theo ("Phân tích từ vựng" là các định nghĩa từ vựng; sử dụng trong các chương tiếp theo là định nghĩa cú pháp.