xem xét:danh sách Python iterator hành vi và tiếp theo (iterator)
>>> lst = iter([1,2,3])
>>> next(lst)
1
>>> next(lst)
2
Vì vậy, thúc đẩy iterator được, như mong đợi, xử lý bởi đột biến cùng đối tượng.
Đây là trường hợp, tôi sẽ mong đợi:
a = iter(list(range(10)))
for i in a:
print(i)
next(a)
để bỏ qua mọi yếu tố thứ hai: cuộc gọi đến next
nên thúc đẩy các iterator một lần, sau đó cuộc gọi ngầm thực hiện bởi các vòng lặp nên đẩy nó một lần thứ hai - và kết quả của cuộc gọi thứ hai này sẽ được gán cho i
.
Không. Vòng lặp in tất cả của các mục trong danh sách, mà không bỏ qua bất kỳ mục nào. Suy nghĩ đầu tiên của tôi là điều này có thể xảy ra bởi vì vòng lặp gọi iter
trên những gì nó được thông qua, và điều này có thể cung cấp cho một iterator độc lập - đây không phải là trường hợp, vì chúng tôi có iter(a) is a
.
Vì vậy, tại sao next
không xuất hiện để nâng cao trình lặp trong trường hợp này?
Tôi không nhận thức được hành vi này từ trình thông dịch. Tôi vui vì tôi đã phát hiện ra rằng trước khi mất rất nhiều thời gian để tự hỏi về nó trong khi giải quyết một số vấn đề thực sự. – brandizzi
... \ * chết *. Điều tồi tệ nhất là tôi có thể nhớ chính xác hành vi thông dịch này cho một người có lẽ cách đây một tuần. – lvc
thú vị. Tôi đã cố gắng cho tôi trong một: tiếp theo (a); in tôi và nghĩ rằng tôi sẽ nhảy đến 1 và in 1,3,5,7,9. Nhưng nó vẫn là 0,2,4,6,8. Tại sao? – user2290820