Có lẽ tôi đã trở thành nạn nhân của thông tin sai lạc trên web, nhưng tôi nghĩ rằng nó có nhiều khả năng chỉ là tôi đã hiểu lầm một cái gì đó. Dựa trên những gì tôi đã học được cho đến nay, range() là một trình tạo và các trình tạo có thể được sử dụng như các trình lặp. Tuy nhiên, mã này:Nếu range() là một trình tạo trong Python 3.3, tại sao tôi không thể gọi next() trên một dãy?
myrange = range(10)
print(next(myrange))
mang lại cho tôi lỗi này:
TypeError: 'range' object is not an iterator
tôi đang thiếu gì ở đây? Tôi đã mong đợi điều này để in 0, và để tiến tới giá trị tiếp theo trong myrange
. Tôi mới sử dụng Python, vì vậy hãy chấp nhận lời xin lỗi của tôi cho câu hỏi khá cơ bản, nhưng tôi không thể tìm thấy một lời giải thích tốt ở bất cứ nơi nào khác.
Xem http://stackoverflow.com/q/13054057/395760 cho sự phân biệt giữa lặp và những thứ mà bạn có thể duyệt qua trong một 'vòng for'. – delnan
Sẽ đúng khi nói rằng máy phát điện có thể lặp lại, nhưng không phải là máy lặp? – Jeff
@Jeff Iterables là các đối tượng mà 'iter' có thể được sử dụng để có được một trình lặp. Các Iterator là các đối tượng có thể được lặp lại thông qua việc sử dụng 'next'. Máy phát điện là một danh mục các trình lặp (các hàm máy phát và các biểu thức máy phát). Ít nhất đó là những gì tôi nghĩ ... –