Có thể chú thích chức năng Python và các gợi ý loại [PEP 3107 và PEP 484] có gây ra một số hiệu ứng thời gian chạy không?
Nó có thể làm cho mã nhanh hơn? Hoặc thu nhỏ việc sử dụng bộ nhớ? Hoặc nếu không thì nó sẽ làm cho mã chậm hơn?
vvvvv
19.4K16 Huy hiệu vàng44 Huy hiệu bạc62 Huy hiệu Đồng16 gold badges44 silver badges62 bronze badges
Đã hỏi ngày 17 tháng 1 năm 2017 lúc 8:42Jan 17, 2017 at 8:42
4
Loại gợi ý và chú thích loại cung cấp các thuộc tính [xem typing.get_type_hints
] có thể được truyền bởi các công cụ của bên thứ 3 nhưng CPython gốc sẽ không kiểm tra các công cụ này trong thời gian chạy, vì vậy điều này không ảnh hưởng đáng kể đến hiệu suất mã theo cùng một cách mà các bình luận không. Tôi đã thực hiện một số bài kiểm tra với timeit
và loại bỏ các gợi ý loại có tác dụng không đáng kể [không thể phân biệt với nhiễu nền] trong thời gian chạy, vì vậy bất kỳ lo ngại nào về hiệu suất chắc chắn sẽ là một trường hợp tối ưu hóa sớm.
Từ PEP 484:
Mặc dù mô -đun gõ được đề xuất sẽ chứa một số khối xây dựng để kiểm tra loại thời gian chạy - đặc biệt là chức năng GET_TYPE_HINTS [] - các gói của bên thứ ba sẽ phải được phát triển để thực hiện chức năng kiểm tra loại thời gian chạy cụ thể, ví dụ như sử dụng các trình trang trí hoặc metaclass. Sử dụng gợi ý loại cho tối ưu hóa hiệu suất được để lại như một bài tập cho người đọc.
LTWORF
7.0376 Huy hiệu vàng30 Huy hiệu bạc42 Huy hiệu Đồng6 gold badges30 silver badges42 bronze badges
Đã trả lời ngày 17 tháng 1 năm 2017 lúc 9:05Jan 17, 2017 at 9:05
Chris_RandsChris_RandsChris_Rands
36.7K13 Huy hiệu vàng79 Huy hiệu bạc111 Huy hiệu đồng13 gold badges79 silver badges111 bronze badges
3
Theo các mục tiêu không phải là các mục tiêu trong tài liệu PEP 484, kiểm tra loại và tối ưu hóa hiệu suất phụ thuộc vào các công cụ của bên thứ ba hoặc để lại cho người lập trình viên.
Vì vậy, tóm lại: Không, chúng sẽ không gây ra bất kỳ hiệu ứng thời gian chạy nào, trừ khi bạn sử dụng chúng một cách rõ ràng.
Xeli
2.2421 Huy hiệu vàng19 Huy hiệu bạc24 Huy hiệu đồng1 gold badge19 silver badges24 bronze badges
Đã trả lời ngày 17 tháng 1 năm 2017 lúc 8:53Jan 17, 2017 at 8:53
RobrobRob
3,2431 Huy hiệu vàng18 Huy hiệu bạc27 Huy hiệu đồng1 gold badge18 silver badges27 bronze badges
2
Loại gợi ý là các chú thích chỉ định loại giá trị thời gian chạy trong mã Python của bạn. Cái nhìn này được gõ tĩnh, phải không?
Điều này đã được chỉ định trong PEP 484 và giới thiệu Python 3.5.Nó trực quan khi nghĩ rằng sẽ có một số cải thiện hiệu suất [tốc độ] trong thời gian chạy vì các ngôn ngữ được đánh máy tĩnh không cần phải kiểm tra kiểu dữ liệu trong thời gian chạy. Đúng? Hãy cùng kiểm tra nào
Chúng tôi sẽ sử dụng loạt Fibonacci cổ điển để kiểm tra xem loại gợi ý loại có cải thiện hiệu suất hay không.
Fibonacci không có gợi ý loại
Sê -ri Fibonacci không có gợi ý loại.Hàm Fibonacci sẽ được gọi là 10.000 lần và hoạt động nối tiếp sẽ được gọi là 10.000 * 100 [thuật ngữ thứ n].
Hồ sơ thời gian chạyChương trình đã hoàn thành việc thực hiện trong khoảng 0,705 giây.
Fibonacci với loại gợi ý
Sử dụng cùng một thuật toán nhưng với gợi ý loại.
Chương trình đã hoàn thành việc thực hiện trong khoảng 0,708 giây.
Thời gian thực hiện rất gần và sự khác biệt có thể được gây ra bởi một số trạng thái CPU.
Cũng cần nhấn mạnh rằng Python sẽ vẫn là một ngôn ngữ được đánh máy động và các tác giả không muốn làm cho các gợi ý loại bắt buộc, ngay cả theo quy ước.
Tại sao phải loại gợi ý sau đó?
Triết lý cốt lõi Python như được tóm tắt trong Zen of Python bao gồm:
- Đẹp tốt hơn xấu.
- Rõ ràng là tốt hơn tiềm ẩn.
- Đơn giản là tốt hơn phức tạp.
- Phức tạp là tốt hơn phức tạp.
- Tính dễ đọc.
Loại gợi ý trong Python sẽ cung cấp nhiều khả năng dễ đọc hơn cho cả công cụ thống kê và người.
PEP [484] này nhằm mục đích cung cấp một cú pháp tiêu chuẩn cho các chú thích loại, mở mã Python để phân tích tĩnh và tái cấu trúc dễ dàng hơn, kiểm tra loại thời gian chạy tiềm năng và [có lẽ, trong một số bối cảnh] tạo mã sử dụng thông tin loại.