2014-04-05 37 views
5

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, izipislice, 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?

Trả lời

4

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.

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.

+0

Xin cảm ơn, nhưng ** x ** là gì? –

+0

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()'. –

+0

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

Các vấn đề liên quan