__future__ --- Định nghĩa câu lệnh trong tương lai¶
Source code: Lib/__future__.py
Nhập khẩu có dạng from __future__ import feature được gọi là future statements. Chúng được trình biên dịch Python đặt trong vỏ đặc biệt để cho phép sử dụng các tính năng Python mới trong các mô-đun chứa câu lệnh tương lai trước khi phát hành tính năng này trở thành tiêu chuẩn.
Mặc dù các câu lệnh trong tương lai này được trình biên dịch Python bổ sung thêm ý nghĩa đặc biệt, nhưng chúng vẫn được thực thi giống như bất kỳ câu lệnh nhập nào khác và __future__ tồn tại và được hệ thống nhập xử lý giống như bất kỳ mô-đun Python nào khác. Thiết kế này phục vụ ba mục đích:
Để tránh gây nhầm lẫn cho các công cụ hiện có vốn phân tích các câu lệnh nhập và mong muốn tìm thấy các mô-đun mà chúng đang nhập.
Để ghi lại thời điểm những thay đổi không tương thích được đưa ra và khi nào chúng sẽ --- hoặc được --- thực hiện bắt buộc. Đây là một dạng 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 bảo rằng future statements chạy trong các bản phát hành trước Python 2.1 ít nhất phải mang lại ngoại lệ thời gian chạy (quá trình nhập
__future__sẽ không thành công vì không có mô-đun nào có tên đó trước 2.1).
Nội dung mô-đun¶
Sẽ không có mô tả tính năng nào bị xóa khỏi __future__. Kể từ khi được giới thiệu trong Python 2.1, các tính năng sau đã được đưa vào ngôn ngữ bằng cơ chế này:
tính năng |
tùy chọn trong |
bắt buộc ở |
hiệu ứng |
|---|---|---|---|
|
2.1.0b1 |
2.2 |
PEP 227: Statically Nested Scopes |
|
2.2.0a1 |
2.3 |
PEP 255: Simple Generators |
|
2.2.0a2 |
3.0 |
PEP 238: Changing the Division Operator |
|
2.5.0a1 |
3.0 |
PEP 328: Imports: Multi-Line and Absolute/Relative |
|
2.5.0a1 |
2.6 |
PEP 343: The “with” Statement |
|
2.6.0a2 |
3.0 |
PEP 3105: Make print a function |
|
2.6.0a2 |
3.0 |
PEP 3112: Bytes literals in Python 3000 |
|
3.5.0b1 |
3,7 |
PEP 479: StopIteration handling inside generators |
|
3.7.0b1 |
Không bao giờ [1] |
PEP 563: Postponed evaluation of annotations, PEP 649: Deferred evaluation of annotations using descriptors |
- class __future__._Feature¶
Mỗi câu lệnh trong
__future__.pycó dạng:FeatureName = _Feature(OptionalRelease, MandatoryRelease, Cờ trình biên dịch)
trong đó, thông thường, OptionalRelease nhỏ hơn MandatoryRelease và cả hai đều là 5 bộ dữ liệu có cùng dạng với
sys.version_info:(PY_MAJOR_VERSION, # the 2 trong 2.1.0a3; một int PY_MINOR_VERSION, # the 1; một int PY_MICRO_VERSION, # the 0; một int PY_RELEASE_LEVEL, # "alpha", "beta", "ứng cử viên" hoặc "cuối cùng"; chuỗi PY_RELEASE_SERIAL # the 3; một int )
- _Feature.getOptionalRelease()¶
OptionalRelease ghi lại bản phát hành đầu tiên có tính năng này được chấp nhận.
- _Feature.getMandatoryRelease()¶
Trong trường hợp MandatoryRelease chưa xảy ra, MandatoryRelease dự đoán bản phát hành trong đó tính năng này sẽ trở thành một phần của ngôn ngữ.
Khác MandatoryRelease ghi lại khi tính năng này trở thành một phần của ngôn ngữ; trong các bản phát hành vào hoặc sau thời điểm đó, các mô-đun không còn cần tuyên bố trong tương lai để sử dụng tính năng được đề cập nhưng có thể tiếp tục sử dụng các nội dung nhập đó.
MandatoryRelease cũng có thể là
None, nghĩa là một tính năng được lên kế hoạch đã bị loại bỏ hoặc nó vẫn chưa được quyết định.
- _Feature.compiler_flag¶
CompilerFlag là cờ (bitfield) cần được chuyển trong đối số thứ tư cho hàm tích hợp
compile()để kích hoạt tính năng này trong mã được biên dịch động. Cờ này được lưu trữ trong thuộc tính_Feature.compiler_flagtrên các phiên bản_Feature.
Xem thêm
- Tuyên bố tương lai
Cách trình biên dịch xử lý các lần nhập trong tương lai.
- PEP 236 - Trở về __tương lai__
Đề xuất ban đầu cho cơ chế __future__.