Hướng dẫn __future__ python - __tương lai__ con trăn

Mã nguồn: lib/__ Tương lai__.py Lib/__future__.py


__future__ là một mô -đun thực sự và phục vụ ba mục đích:

  • Để tránh gây nhầm lẫn các công cụ hiện có phân tích các báo cáo nhập khẩu và mong đợi tìm thấy các mô -đun mà họ đang nhập.

  • Để đảm bảo rằng các câu lệnh trong tương lai chạy trong các bản phát hành trước 2.1 ít nhất là các ngoại lệ thời gian chạy mang lại (việc nhập __future__ sẽ thất bại, vì không có mô -đun nào của tên đó trước 2.1).future statements run under releases prior to 2.1 at least yield runtime exceptions (the import of __future__ will fail, because there was no module of that name prior to 2.1).

  • Để ghi lại khi những thay đổi không tương thích đã được giới thiệu, và khi nào chúng sẽ - hoặc - được thực hiện bắt buộc. Đây là một hình thức tài liệu thực thi và có thể được kiểm tra theo chương trình thông qua việc nhập __future__ và kiểm tra nội dung của nó.

Mỗi câu trong __future__.py thuộc Mẫu:

FeatureName = _Feature(OptionalRelease, MandatoryRelease,
                       CompilerFlag)

Trong đó, thông thường, tùy chọn là ít hơn bắt buộc và cả hai đều là 5 lớp có cùng dạng với sys.version_info:

(PY_MAJOR_VERSION, # the 2 in 2.1.0a3; an int
 PY_MINOR_VERSION, # the 1; an int
 PY_MICRO_VERSION, # the 0; an int
 PY_RELEASE_LEVEL, # "alpha", "beta", "candidate" or "final"; string
 PY_RELEASE_SERIAL # the 3; an int
)

Tùy chọnAlrelease ghi lại bản phát hành đầu tiên trong đó tính năng được chấp nhận.

Trong trường hợp bắt buộc chưa xảy ra, bắt buộc dự đoán việc phát hành trong đó tính năng này sẽ trở thành một phần của ngôn ngữ.

Các bản ghi bắt buộc khác khi tính năng trở thành một phần của ngôn ngữ; Trong các bản phát hành tại hoặc sau đó, các mô -đun không còn cần một tuyên bố trong tương lai để sử dụng tính năng này trong câu hỏi, nhưng có thể tiếp tục sử dụng nhập khẩu đó.

Bắt buộc cũng có thể là None, có nghĩa là một tính năng được lên kế hoạch đã bị loại bỏ.

Các trường hợp của lớp _Feature có hai phương pháp tương ứng, getOptionalRelease()

(PY_MAJOR_VERSION, # the 2 in 2.1.0a3; an int
 PY_MINOR_VERSION, # the 1; an int
 PY_MICRO_VERSION, # the 0; an int
 PY_RELEASE_LEVEL, # "alpha", "beta", "candidate" or "final"; string
 PY_RELEASE_SERIAL # the 3; an int
)
0.

CompilerFlag là cờ (Bitfield) nên được truyền trong đối số thứ tư cho hàm tích hợp

(PY_MAJOR_VERSION, # the 2 in 2.1.0a3; an int
 PY_MINOR_VERSION, # the 1; an int
 PY_MICRO_VERSION, # the 0; an int
 PY_RELEASE_LEVEL, # "alpha", "beta", "candidate" or "final"; string
 PY_RELEASE_SERIAL # the 3; an int
)
1 để kích hoạt tính năng trong mã được biên dịch động. Cờ này được lưu trữ trong thuộc tính
(PY_MAJOR_VERSION, # the 2 in 2.1.0a3; an int
 PY_MINOR_VERSION, # the 1; an int
 PY_MICRO_VERSION, # the 0; an int
 PY_RELEASE_LEVEL, # "alpha", "beta", "candidate" or "final"; string
 PY_RELEASE_SERIAL # the 3; an int
)
2 trên các trường hợp _Feature.

Không có mô tả tính năng nào sẽ bị xóa từ __future__. Kể từ khi được giới thiệu trong Python 2.1, các tính năng sau đây đã tìm được đường vào ngôn ngữ bằng cơ chế này:

tính năng

tùy chọn trong

bắt buộc trong

hiệu ứng

nested_scopes

2.1.0b1

2.2

PEP 227: Phạm vi lồng nhau tĩnh: Statically Nested Scopes

máy phát điện

2.2.0a1

2.3

PEP 255: Máy phát điện đơn giản: Simple Generators

phân công

2.2.0a2

3.0

PEP 238: Thay đổi nhà điều hành bộ phận: Changing the Division Operator

absolute_import

2.5.0a1

3.0

PEP 328: Nhập khẩu: đa dòng và tuyệt đối/tương đối: Imports: Multi-Line and Absolute/Relative

with_statement

2.5.0a1

2.6

PEP 343: Tuyên bố với "với": The “with” Statement

print_function

2.6.0a2

3.0

PEP 3105: Biến chức năng in thành một chức năng: Make print a function

unicode_literals

2.6.0a2

3.0

PEP 3112: BYTES BÀI VIẾT TRONG PYTHON 3000: Bytes literals in Python 3000

generator_stop

3.5.0b1

3.7

PEP 479: Xử lý strepitation bên trong máy phát điện: StopIteration handling inside generators

Chú thích

3.7.0b1

TBD 1

PEP 563: Đánh giá các chú thích bị hoãn lại: Postponed evaluation of annotations

1

(PY_MAJOR_VERSION, # the 2 in 2.1.0a3; an int
 PY_MINOR_VERSION, # the 1; an int
 PY_MICRO_VERSION, # the 0; an int
 PY_RELEASE_LEVEL, # "alpha", "beta", "candidate" or "final"; string
 PY_RELEASE_SERIAL # the 3; an int
)
5 trước đây đã được lên kế hoạch trở thành bắt buộc trong Python 3.10, nhưng Hội đồng lái Python hai lần quyết định trì hoãn sự thay đổi (thông báo cho Python 3.10; thông báo cho Python 3.11). Không có quyết định cuối cùng đã được đưa ra. Xem thêm PEP 563 và PEP 649.PEP 563 and PEP 649.