Giới thiệu

"Thư viện Python" chứa một số loại thành phần khác nhau.

Nó chứa các kiểu dữ liệu thường được coi là một phần "cốt lõi" của ngôn ngữ, chẳng hạn như số và danh sách. Đối với các loại này, lõi ngôn ngữ Python xác định dạng chữ và đặt một số ràng buộc về ngữ nghĩa của chúng, nhưng không xác định đầy đủ ngữ nghĩa. (Mặt khác, lõi ngôn ngữ xác định các thuộc tính cú pháp như cách viết và mức độ ưu tiên của các toán tử.)

Thư viện cũng chứa các hàm dựng sẵn và ngoại lệ --- các đối tượng có thể được sử dụng bởi tất cả mã Python mà không cần câu lệnh import. Một số trong số này được xác định bởi ngôn ngữ cốt lõi, nhưng nhiều thứ không cần thiết đối với ngữ nghĩa cốt lõi và chỉ được mô tả ở đây.

Tuy nhiên, phần lớn thư viện bao gồm một tập hợp các mô-đun. Có nhiều cách để mổ xẻ bộ sưu tập này. Một số mô-đun được viết bằng C và được tích hợp sẵn vào trình thông dịch Python; một số khác được viết bằng Python và được nhập ở dạng nguồn. Một số mô-đun cung cấp các giao diện dành riêng cho Python, như in dấu vết ngăn xếp; một số cung cấp giao diện dành riêng cho các hệ điều hành cụ thể, chẳng hạn như quyền truy cập vào phần cứng cụ thể; một số khác cung cấp các giao diện dành riêng cho một miền ứng dụng cụ thể, như World Wide Web. Một số mô-đun có sẵn ở tất cả các phiên bản và cổng của Python; những cái khác chỉ khả dụng khi hệ thống cơ bản hỗ trợ hoặc yêu cầu chúng; tuy nhiên một số khác chỉ khả dụng khi một tùy chọn cấu hình cụ thể được chọn tại thời điểm Python được biên dịch và cài đặt.

Sổ tay hướng dẫn này được sắp xếp "từ trong ra ngoài": đầu tiên nó mô tả các hàm dựng sẵn, kiểu dữ liệu và ngoại lệ, và cuối cùng là các mô-đun, được nhóm thành các chương của các mô-đun liên quan.

Điều này có nghĩa là nếu bạn bắt đầu đọc hướng dẫn này từ đầu và chuyển sang chương tiếp theo khi cảm thấy nhàm chán, bạn sẽ có được cái nhìn tổng quan hợp lý về các mô-đun có sẵn và các lĩnh vực ứng dụng được thư viện Python hỗ trợ. Tất nhiên, bạn không cần phải đọc nó như một cuốn tiểu thuyết --- bạn cũng có thể duyệt qua mục lục (phía trước sách hướng dẫn) hoặc tìm một chức năng, mô-đun hoặc thuật ngữ cụ thể trong chỉ mục (ở phía sau). Và cuối cùng, nếu bạn thích tìm hiểu về các chủ đề ngẫu nhiên, bạn chọn một số trang ngẫu nhiên (xem mô-đun random) và đọc một hoặc hai phần. Bất kể bạn đọc các phần trong sổ tay này theo thứ tự nào, bạn nên bắt đầu với chương Chức năng tích hợp vì phần còn lại của sổ tay hướng dẫn này đòi hỏi bạn phải làm quen với tài liệu này.

Hãy để buổi biểu diễn bắt đầu!

Ghi chú về tính sẵn có

  • Ghi chú "Tính khả dụng: Unix" có nghĩa là chức năng này thường được tìm thấy trên các hệ thống Unix. Nó không đưa ra bất kỳ tuyên bố nào về sự tồn tại của nó trên một hệ điều hành cụ thể.

  • Nếu không được ghi chú riêng, tất cả các chức năng yêu cầu "Tính khả dụng: Unix" đều được hỗ trợ trên macOS, iOS và Android, tất cả đều được xây dựng trên lõi Unix.

  • Nếu ghi chú về tính khả dụng chứa cả phiên bản Kernel tối thiểu và phiên bản libc tối thiểu thì cả hai điều kiện đều phải được đáp ứng. Ví dụ: một tính năng có ghi chú Availability: Linux >= 3.17 with glibc >= 2.27 yêu cầu cả Linux 3.17 trở lên và glibc 2.27 trở lên.

Nền tảng WebAssugging

Nền tảng WebAssembly wasm32-emscripten (Emscripten) và wasm32-wasi (WASI) cung cấp một tập hợp con các API POSIX. Thời gian chạy và trình duyệt của WebAssugging được đóng hộp cát và có quyền truy cập hạn chế vào máy chủ cũng như các tài nguyên bên ngoài. Bất kỳ mô-đun thư viện chuẩn Python nào sử dụng các quy trình, phân luồng, kết nối mạng, tín hiệu hoặc các hình thức giao tiếp giữa các quá trình khác (IPC), đều không khả dụng hoặc có thể không hoạt động như trên các hệ thống tương tự Unix khác. I/O tệp, hệ thống tệp và các chức năng liên quan đến quyền của Unix cũng bị hạn chế. Emscripten không cho phép chặn I/O. Các hoạt động chặn khác như sleep() chặn vòng lặp sự kiện của trình duyệt.

Các thuộc tính và hành vi của Python trên nền tảng WebAssembly phụ thuộc vào phiên bản Emscripten-SDK hoặc WASI-SDK, thời gian chạy WASM (trình duyệt, NodeJS, wasmtime) và cờ thời gian xây dựng Python. WebAssembly, Emscripten và WASI đang phát triển các tiêu chuẩn; một số tính năng như kết nối mạng có thể được hỗ trợ trong tương lai.

Đối với Python trên trình duyệt, người dùng nên xem xét Pyodide hoặc PyScript. PyScript được xây dựng dựa trên Pyodide, bản thân nó được xây dựng dựa trên CPython và Emscripten. Pyodide cung cấp quyền truy cập vào API JavaScript và DOM của trình duyệt cũng như khả năng kết nối mạng hạn chế với API XMLHttpRequestFetch của JavaScript.

  • Các API liên quan đến quy trình không có sẵn hoặc luôn bị lỗi và có lỗi. Điều đó bao gồm các API tạo ra các quy trình mới (fork(), execve()), chờ các quy trình (waitpid()), gửi tín hiệu (kill()) hoặc tương tác với các quy trình. Zz004zz có thể nhập được nhưng không hoạt động.

  • Mô-đun socket có sẵn nhưng bị giới hạn và hoạt động khác với các nền tảng khác. Trên Emscripten, các ổ cắm luôn không bị chặn và yêu cầu mã JavaScript bổ sung cũng như các trình trợ giúp trên máy chủ để ủy quyền TCP thông qua WebSockets; xem Emscripten Networking để biết thêm thông tin. Xem trước ảnh chụp nhanh WASI 1 chỉ cho phép các ổ cắm từ bộ mô tả tệp hiện có.

  • Một số hàm còn sơ khai không làm gì cả và luôn trả về các giá trị được mã hóa cứng.

  • Các chức năng liên quan đến bộ mô tả tệp, quyền đối với tệp, quyền sở hữu tệp và liên kết bị hạn chế và không hỗ trợ một số thao tác. Ví dụ: WASI không cho phép liên kết tượng trưng với tên tệp tuyệt đối.

Nền tảng di động

Ở hầu hết các khía cạnh, Android và iOS đều là hệ điều hành POSIX. Tất cả I/O tệp, xử lý ổ cắm và phân luồng đều hoạt động giống như trên bất kỳ hệ điều hành POSIX nào. Tuy nhiên, có một số khác biệt chính:

  • Nền tảng di động chỉ có thể sử dụng Python ở chế độ "nhúng". Không có Python REPL và không có khả năng sử dụng các tệp thực thi riêng biệt như python hoặc pip. Để thêm mã Python vào ứng dụng di động của bạn, bạn phải sử dụng Python embedding API. Để biết thêm chi tiết, xem Sử dụng Python trên AndroidSử dụng Python trên iOS.

  • Quy trình con:

    • Trên Android, có thể tạo các quy trình con nhưng officially unsupported. Đặc biệt, Android không hỗ trợ bất kỳ phần nào của System V IPC API nên không có multiprocessing.

    • Ứng dụng iOS không thể sử dụng bất kỳ hình thức giao tiếp xử lý con, đa xử lý hoặc liên tiến trình nào. Nếu một ứng dụng iOS cố gắng tạo một quy trình con thì quá trình tạo quy trình con đó sẽ bị khóa hoặc gặp sự cố. Ứng dụng iOS không có khả năng hiển thị các ứng dụng khác đang chạy cũng như không có khả năng giao tiếp với các ứng dụng đang chạy khác, ngoài các API dành riêng cho iOS tồn tại cho mục đích này.

  • Các ứng dụng dành cho thiết bị di động có quyền truy cập hạn chế để sửa đổi tài nguyên hệ thống (chẳng hạn như đồng hồ hệ thống). Những tài nguyên này thường sẽ là readable, nhưng những nỗ lực sửa đổi những tài nguyên đó thường sẽ thất bại.

  • Đầu vào và đầu ra của bảng điều khiển:

    • Trên Android, stdoutstderr gốc không được kết nối với bất cứ thứ gì, vì vậy Python cài đặt các luồng riêng của nó để chuyển hướng thông báo đến nhật ký hệ thống. Chúng có thể được nhìn thấy dưới thẻ python.stdoutpython.stderr tương ứng.

    • Ứng dụng iOS có khái niệm hạn chế về đầu ra của bảng điều khiển. stdoutstderr exist, và nội dung được ghi vào stdoutstderr sẽ hiển thị trong nhật ký khi chạy trong Xcode, nhưng nội dung won't này sẽ được ghi lại trong nhật ký hệ thống. Nếu người dùng đã cài đặt ứng dụng của bạn cung cấp nhật ký ứng dụng của họ làm công cụ hỗ trợ chẩn đoán thì họ sẽ không bao gồm bất kỳ chi tiết nào được ghi vào stdout hoặc stderr.

    • Ứng dụng di động không có stdin nào có thể sử dụng được. Mặc dù các ứng dụng có thể hiển thị bàn phím ảo nhưng đây là một tính năng phần mềm chứ không phải tính năng đi kèm với stdin.

      Do đó, các mô-đun Python liên quan đến thao tác trên bảng điều khiển (chẳng hạn như cursesreadline) không có sẵn trên nền tảng di động.