Câu hỏi này thuộc loại triết học. Có mô-đun itertools
lộng lẫy trong Python 2, cung cấp, đặc biệt, tương đương máy phát điện cho các hàm dựng sẵn Python như map
, filter
, zip
hoặc slice
. Và tương đương được gọi là imap
, ifilter
, izip
và islice
, tương ứng. Theo tôi hiểu, tiền tố i trong tên của chúng có nghĩa là i terator. Nhưng có cùng một điều về xrange
: nó tương đương với range
đối tượng máy phát trả lại thay vì danh sách lớn. Vì vậy, tại sao nó không được gọi là irange
? Tiền tố x thực sự có ý nghĩa gì?Python 2: tại sao xrange không được gọi là irange?
5
A
Trả lời
4
Vì xrange()
được thêm vào ngôn ngữ trước khi nó có trình vòng lặp và bản thân nó không phải là trình lặp.
- vòng lặp đã được thêm vào trong PEP 234, một đề nghị tạo ra vào năm 2001.
xrange()
was added to Python in 1993.
Python 1.0 được phát hành vào năm 1994, vì vậy xrange()
đã được thêm vào rất sớm. Các x
rất có thể không có một ý nghĩa cụ thể ở đây.
Nhưng xrange()
là không thực sự là một iterator, nó là một iterable; bạn có thể lặp lại nó nhiều lần, không giống như vòng lặp. Nó cũng là một chuỗi, vì nó có chiều dài và có thể được lập chỉ mục.
Vì vậy đối tượng đã được đổi tên thành range()
(thay thế hoàn toàn hàm Python 2 range()
) và hành vi chuỗi của nó đã được mở rộng thêm.
Các vấn đề liên quan
- 1. Tại sao một lớp học được gọi là "được gọi" khi không được bắt đầu? - Python
- 2. Tại sao GetVaryByCustomString không được gọi là
- 3. Tại sao hàm hủy python được gọi?
- 4. Tên 'xrange' không được định nghĩa trong Python 3
- 5. @PostPersist không được gọi là ... @PrePersist là ... tại sao?
- 6. Tại sao __init__ không được gọi nếu __new__ được gọi là không có args
- 7. Tại sao __PRETTY_FUNCTION__ được gọi là __PRETTY_FUNCTION__?
- 8. Tại sao nó được gọi là BSON?
- 9. Tại sao nó được gọi là onBlur?
- 10. Tại sao cookie được gọi là "cookie"?
- 11. Tại sao 2 /// 2 là 2 trong Javascript?
- 12. Tại sao div được gọi là div? Tại sao một nhịp gọi là nhịp?
- 13. là gì nhanh bằng Python "trong khi" hoặc "cho xrange"
- 14. Tại sao malloc() và printf() được gọi là không reentrant?
- 15. Tại sao AJAX được gọi là không đồng bộ?
- 16. Tại sao không phải là presentationController: viewControllerForAdaptivePresentationStyle: được gọi?
- 17. Tại sao không 2 .__ thêm __ (3) làm việc bằng Python?
- 18. Tại sao trình mô tả Python __set__ không được gọi là
- 19. Tại sao phương thức mảng mảng được gọi là "gọi"?
- 20. Tại sao Python 3 chậm hơn đáng kể so với Python 2?
- 21. Nếu Python 3 là python mới nhất, tại sao python 2 vẫn còn xung quanh?
- 22. Tại sao onBackPressed() không được gọi?
- 23. Tại sao hàm textFieldShouldReturn không được gọi?
- 24. Tại sao UncaughtExceptionHandler không được ExecutorService gọi?
- 25. tại sao textFieldDidEndEditing: không được gọi?
- 26. Tại sao 'Chọn' được gọi là tuyên bố DML?
- 27. Tại sao tham số biểu thức python này không được mở rộng tại thời gian gọi?
- 28. Tại sao onCreateView của đoạn, onCreate, onActivityCreated được gọi là
- 29. Tại sao C booleans được gọi là _Bool?
- 30. Tại sao một lớp giả được gọi là?
Xin cảm ơn, nhưng ** x ** là gì? –
Tôi thực sự không biết; bạn phải hỏi Guido. Tôi không nghĩ nó là viết tắt của bất cứ điều gì. Nó có thể là một tham chiếu đến một đối tượng tương tự trong ngôn ngữ khác, hoặc chỉ là một tiền tố để phân biệt nó với 'range()'. –
Không có sự khác biệt trong việc triển khai thực tế? Theo như tôi biết, 'range()' trong CPython là tốc độ thực hiện tối ưu hóa, sử dụng C ints dài, trong khi 'irange()' là một trình lặp thường xuyên, cung cấp cùng chức năng như 'range()'. – Mkoch