Trong Python, các đối tượng có thể được phân loại thành một trong hai nhóm, có thể lặp lại hoặc không thể lặp lại. Nếu một đối tượng có khả năng trả về từng giá trị thành viên của nó thì có thể lặp lại; . Đối với các đối tượng không thể lặp lại, chúng ta chỉ phải coi nội dung là một đơn vị duy nhất; . Một số ví dụ phổ biến về các đối tượng có thể lặp lại là danh sách, bộ dữ liệu, bộ và từ điển
student_list=['Ravi','Shivam','Teja','Rohan'] student_tuple=('Ravi','Shivam','Teja','Rohan') student_set={'Ravi','Shivam','Teja','Rohan'} student_dict = {'name': 'Ravi', 'branch': 'CSE', 'year': 3 }Trình lặp
Python có một đối tượng chuyên dụng được gọi là trình vòng lặp được sử dụng để lặp qua các đối tượng có thể lặp lại. Các trình lặp này được triển khai bằng hai phương thức, iter()iter()iter() và next()next()next(), thường được gọi là giao thức trình lặp. Nhiệm vụ của iter()iter()iter() là khởi tạo phương thức;
Cách sử dụng Iterator
Tạo một trình vòng lặp
iter()iter()iter() được sử dụng để tạo trình vòng lặp trên đối tượng có thể lặp lại. Trình lặp được tạo là một trình trích xuất giá trị trích xuất các giá trị liên tiếp từ đối tượng có thể lặp đến đối tượng mà nó được liên kết
itr = iter(student_list) #Di chuyển trình vòng lặp
Sau khi trình vòng lặp được tạo, hàm tích hợp sẵn next(itr) # 'Ravi' 6 được sử dụng để lấy giá trị tiếp theo từ trình vòng lặp. Giá trị này sẽ bắt đầu từ phần tử đầu tiên
next(itr) # 'Ravi'Đoạn mã trên sẽ trả về phần tử đầu tiên từ danh sách, tôi. e. , RaviRaviRavi. Tương tự, khi chúng ta gọi lại, nó sẽ trả về phần tử tiếp theo trong danh sách
next(itr) # 'Shivam'Nếu tất cả các giá trị từ một trình vòng lặp đã được trả về, lệnh gọi next(itr) # 'Ravi' 6 tiếp theo sẽ tạo ra một ngoại lệ next(itr) # 'Ravi' 8. Mọi nỗ lực tiếp theo để lấy giá trị từ trình vòng lặp sẽ không thành công
Tóm lại, chúng ta có thể nói rằng, nếu chúng ta có một đối tượng có thể lặp lại (giả sử ppp), thì có thể lấy một trình vòng lặp qua nó bằng cách sử dụng iter(a) và mỗi lệnh gọi next(itr) # 'Ravi' 6 qua trình vòng lặp đã tạo sẽ nhận được giá trị tiếp theo từ ppp
Ngoại lệ JavaScript "không thể lặp lại" xảy ra khi giá trị được cung cấp ở phía bên tay phải của next(itr) # 'Shivam' 0, làm đối số của hàm chẳng hạn như const myobj = { arrayOrObjProp1: {}, arrayOrObjProp2: [42] }; const { arrayOrObjProp1: [value1], arrayOrObjProp2: [value2] } = myobj; // TypeError: object is not iterable console.log(value1, value2); 0 hoặc const myobj = { arrayOrObjProp1: {}, arrayOrObjProp2: [42] }; const { arrayOrObjProp1: [value1], arrayOrObjProp2: [value2] } = myobj; // TypeError: object is not iterable console.log(value1, value2); 1 hoặc ở phía bên phải của phép gán phá hủy mảng, không phải là
Thông điệp
TypeError: object is not iterable (cannot read property Symbol(Symbol.iterator)) (V8-based) TypeError: x is not iterable (Firefox) TypeError: undefined is not a function (near '...[x]...') (Safari)
loại lỗi
const myobj = { arrayOrObjProp1: {}, arrayOrObjProp2: [42] }; const { arrayOrObjProp1: [value1], arrayOrObjProp2: [value2] } = myobj; // TypeError: object is not iterable console.log(value1, value2); 2
Có chuyện gì?
Giá trị được cung cấp ở phía bên tay phải của next(itr) # 'Shivam' 0 hoặc làm đối số của một hàm chẳng hạn như const myobj = { arrayOrObjProp1: {}, arrayOrObjProp2: [42] }; const { arrayOrObjProp1: [value1], arrayOrObjProp2: [value2] } = myobj; // TypeError: object is not iterable console.log(value1, value2); 0 hoặc const myobj = { arrayOrObjProp1: {}, arrayOrObjProp2: [42] }; const { arrayOrObjProp1: [value1], arrayOrObjProp2: [value2] } = myobj; // TypeError: object is not iterable console.log(value1, value2); 1 hoặc ở phía bên phải của phép gán phá hủy mảng, không phải là một đối tượng có thể lặp lại. Một iterable có thể là một loại iterable được tích hợp sẵn, chẳng hạn như const myobj = { arrayOrObjProp1: {}, arrayOrObjProp2: [42] }; const { arrayOrObjProp1: [value1], arrayOrObjProp2: [value2] } = myobj; // TypeError: object is not iterable console.log(value1, value2); 6, const myobj = { arrayOrObjProp1: {}, arrayOrObjProp2: [42] }; const { arrayOrObjProp1: [value1], arrayOrObjProp2: [value2] } = myobj; // TypeError: object is not iterable console.log(value1, value2); 7 hoặc const myobj = { arrayOrObjProp1: {}, arrayOrObjProp2: [42] }; const { arrayOrObjProp1: [value1], arrayOrObjProp2: [value2] } = myobj; // TypeError: object is not iterable console.log(value1, value2); 8, một kết quả của trình tạo hoặc một đối tượng triển khai giao thức có thể lặp lại
ví dụ
Mảng phá hủy không thể lặp lại
const myobj = { arrayOrObjProp1: {}, arrayOrObjProp2: [42] }; const { arrayOrObjProp1: [value1], arrayOrObjProp2: [value2] } = myobj; // TypeError: object is not iterable console.log(value1, value2);
Không thể lặp lại có thể trở thành const myobj = { arrayOrObjProp1: {}, arrayOrObjProp2: [42] }; const { arrayOrObjProp1: [value1], arrayOrObjProp2: [value2] } = myobj; // TypeError: object is not iterable console.log(value1, value2); 9 trong một số môi trường thời gian chạy
Lặp lại các thuộc tính đối tượng
Trong JavaScript, các itr = iter(student_list) # 50 không thể lặp lại trừ khi chúng triển khai giao thức có thể lặp lại. Do đó, bạn không thể sử dụng next(itr) # 'Shivam' 0 để lặp lại các thuộc tính của một đối tượng
itr = iter(student_list) # 5
Thay vào đó, bạn phải sử dụng itr = iter(student_list) # 52 hoặc itr = iter(student_list) # 53, để lặp lại các thuộc tính hoặc mục nhập của một đối tượng
itr = iter(student_list) # 9
Một tùy chọn khác cho trường hợp sử dụng này có thể là sử dụng một const myobj = { arrayOrObjProp1: {}, arrayOrObjProp2: [42] }; const { arrayOrObjProp1: [value1], arrayOrObjProp2: [value2] } = myobj; // TypeError: object is not iterable console.log(value1, value2); 8
next(itr) # 'Ravi' 1
Lặp lại trên một trình tạo
Các hàm tạo là các hàm bạn gọi để tạo một đối tượng có thể lặp lại
next(itr) # 'Ravi' 2
Khi chúng không được gọi, đối tượng itr = iter(student_list) # 55 tương ứng với trình tạo có thể gọi được, nhưng không thể lặp lại. Việc gọi một trình tạo sẽ tạo ra một đối tượng có thể lặp lại sẽ lặp lại các giá trị được tạo ra trong quá trình thực thi trình tạo
next(itr) # 'Ravi' 4
Lặp lại qua một lần lặp tùy chỉnh
Có thể tạo các lần lặp tùy chỉnh bằng cách triển khai phương thức itr = iter(student_list) # 56. Bạn phải chắc chắn rằng phương thức iterator của bạn trả về một đối tượng là iterator, nghĩa là nó phải có phương thức tiếp theo