Bạn sẽ bắt đầu bằng việc so sánh một số mô hình khác nhau được các ngôn ngữ lập trình sử dụng để triển khai phép lặp xác định
Sau đó, bạn sẽ tìm hiểu về iterables và iterators, hai khái niệm tạo thành nền tảng của phép lặp xác định trong Python
Cuối cùng, bạn sẽ kết hợp tất cả lại với nhau và tìm hiểu về vòng lặp
for in :
0 của PythonTải xuống miễn phí. Nhận một chương mẫu từ Thủ thuật Python. Cuốn sách chỉ cho bạn các phương pháp hay nhất về Python với các ví dụ đơn giản mà bạn có thể áp dụng ngay lập tức để viết mã Pythonic + đẹp hơn
Khảo sát về phép lặp xác định trong lập trình
Các vòng lặp xác định thường được gọi là vòng lặp
for in :
0 vì for in :
0 là từ khóa được sử dụng để giới thiệu chúng trong hầu hết các ngôn ngữ lập trình, bao gồm cả PythonTrong lịch sử, các ngôn ngữ lập trình đã cung cấp một số loại vòng lặp
for in :
0. Chúng được mô tả ngắn gọn trong các phần sauLoại bỏ các quảng cáoVòng lặp phạm vi số
Vòng lặp
for in :
0 cơ bản nhất là một câu lệnh phạm vi số đơn giản với các giá trị bắt đầu và kết thúc. Định dạng chính xác khác nhau tùy thuộc vào ngôn ngữ nhưng thường trông giống như thế nàyfor i = 1 to 10
Ở đây, phần thân của vòng lặp được thực hiện mười lần. Biến
for in :
7 giả định giá trị for in :
8 trong lần lặp đầu tiên, for in :
9 trong lần lặp thứ hai, v.v. Loại vòng lặp for in :
0 này được sử dụng trong các ngôn ngữ BASIC, Algol và PascalVòng lặp ba biểu thức
Một dạng khác của vòng lặp
for in :
0 được phổ biến bởi ngôn ngữ lập trình C có ba phần- Một khởi tạo
- Một biểu thức xác định một điều kiện kết thúc
- Một hành động được thực hiện ở cuối mỗi lần lặp
Loại vòng lặp này có dạng như sau
for in :
1Lưu ý kỹ thuật. Trong ngôn ngữ lập trình C,
for in :
22 tăng biến for in :
7. Nó gần tương đương với for in :
24 trong PythonVòng lặp này được hiểu như sau
- Khởi tạo
7 thànhfor in :
8for in :
- Tiếp tục lặp miễn là
27for in :
- Tăng
7 lênfor in :
8 sau mỗi lần lặp vòng lặpfor in :
Các vòng lặp
for in :
0 ba biểu thức rất phổ biến vì các biểu thức được chỉ định cho ba phần có thể gần như bất kỳ thứ gì, do đó, điều này linh hoạt hơn một chút so với dạng phạm vi số đơn giản hơn được hiển thị ở trên. Các vòng lặp for in :
0 này cũng có trong các ngôn ngữ C++, Java, PHP và PerlVòng lặp dựa trên bộ sưu tập hoặc dựa trên Iterator
Loại vòng lặp này lặp qua một tập hợp các đối tượng, thay vì chỉ định các giá trị hoặc điều kiện số
for in :
2Mỗi lần qua vòng lặp, biến
for in :
7 sẽ nhận giá trị của đối tượng tiếp theo trong for in :
43. Loại vòng lặp for in :
0 này được cho là tổng quát và trừu tượng nhất. Perl và PHP cũng hỗ trợ loại vòng lặp này, nhưng nó được giới thiệu bởi từ khóa for in :
45 thay vì for in :
0Đọc thêm. Xem trang Wikipedia vòng lặp For để có cái nhìn sâu hơn về việc triển khai phép lặp xác định trên các ngôn ngữ lập trình
Vòng lặp for in :
0 của Python
for in :
Trong số các loại vòng lặp được liệt kê ở trên, Python chỉ thực hiện vòng lặp cuối cùng. lặp lại dựa trên bộ sưu tập. Thoạt nhìn, điều đó có vẻ giống như một thỏa thuận thô sơ, nhưng hãy yên tâm rằng việc triển khai phép lặp xác định của Python rất linh hoạt nên cuối cùng bạn sẽ không cảm thấy bị lừa
Trong thời gian ngắn, bạn sẽ tìm hiểu chi tiết về vòng lặp
for in :
0 của Python. Nhưng bây giờ, hãy bắt đầu với một nguyên mẫu và ví dụ nhanh, chỉ để làm quenVòng lặp
for in :
0 của Python trông như thế nàyfor in :
for in :
20 là một tập hợp các đối tượng—ví dụ: danh sách hoặc bộ. for in :
21 trong thân vòng lặp được biểu thị bằng dấu thụt đầu dòng, như với tất cả các cấu trúc điều khiển Python và được thực thi một lần cho mỗi mục trong for in :
20. Biến vòng lặp for in :
23 nhận giá trị của phần tử tiếp theo trong for in :
20 mỗi lần đi qua vòng lặpĐây là một ví dụ đại diện
>>>
for in :
2Trong ví dụ này,
for in :
20 là danh sách for in :
26 và for in :
23 là biến for in :
7. Mỗi lần qua vòng lặp, for in :
7 nhận một mục liên tiếp trong for in :
26, do đó, for in :
41 hiển thị các giá trị lần lượt là for in :
42, for in :
43 và for in :
44. Một vòng lặp for in :
0 như thế này là cách Pythonic để xử lý các mục trong một lần lặpNhưng chính xác thì iterable là gì?
Loại bỏ các quảng cáoIterables
Trong Python, iterable có nghĩa là một đối tượng có thể được sử dụng trong phép lặp. Thuật ngữ này được sử dụng như
- Một tính từ. Một đối tượng có thể được mô tả là có thể lặp lại
- Một danh từ. Một đối tượng có thể được đặc trưng như một iterable
Nếu một đối tượng có thể lặp lại, nó có thể được chuyển đến hàm Python tích hợp sẵn
for in :
47, hàm này trả về một thứ gọi là trình lặp. Có, thuật ngữ hơi lặp lại. Cố lên. Cuối cùng thì tất cả cũng thành côngMỗi đối tượng trong ví dụ sau là một iterable và trả về một số loại iterator khi được chuyển đến
for in :
47>>>
for in :
4Mặt khác, các loại đối tượng này không thể lặp lại
>>>
for in :
2Tất cả các loại dữ liệu bạn đã gặp cho đến nay là loại bộ sưu tập hoặc bộ chứa đều có thể lặp lại. Chúng bao gồm các loại chuỗi, danh sách, tuple, dict, set và freezeset
Nhưng đây không phải là những kiểu duy nhất mà bạn có thể lặp lại. Nhiều đối tượng được tích hợp vào Python hoặc được định nghĩa trong các mô-đun được thiết kế để có thể lặp lại. Ví dụ: các tệp đang mở trong Python có thể lặp lại. Như bạn sẽ sớm thấy trong phần hướng dẫn về tệp I/O, việc lặp qua một đối tượng tệp đang mở sẽ đọc dữ liệu từ tệp
Trên thực tế, hầu hết mọi đối tượng trong Python đều có thể được lặp lại. Ngay cả các đối tượng do người dùng định nghĩa cũng có thể được thiết kế theo cách mà chúng có thể được lặp đi lặp lại. [Bạn sẽ tìm hiểu cách thực hiện điều đó trong bài viết sắp tới về lập trình hướng đối tượng. ]
vòng lặp
Được rồi, bây giờ bạn đã biết ý nghĩa của việc một đối tượng có thể lặp lại và bạn biết cách sử dụng
for in :
47 để lấy một trình vòng lặp từ nó. Khi bạn đã có một iterator, bạn có thể làm gì với nó?Trình lặp về cơ bản là trình tạo giá trị tạo ra các giá trị liên tiếp từ đối tượng có thể lặp được liên kết của nó. Hàm tích hợp sẵn
for i = 1 to 10
50 được sử dụng để lấy giá trị tiếp theo từ trong iteratorĐây là một ví dụ sử dụng cùng một danh sách như trên
>>>
for in :
4Trong ví dụ này,
for in :
26 là một danh sách có thể lặp lại và for i = 1 to 10
52 là trình vòng lặp được liên kết, thu được với for in :
47. Mỗi cuộc gọi for i = 1 to 10
54 nhận được giá trị tiếp theo từ for i = 1 to 10
52Lưu ý cách một iterator giữ trạng thái bên trong. Nó biết những giá trị nào đã được lấy, vì vậy khi bạn gọi
for i = 1 to 10
50, nó sẽ biết giá trị nào sẽ trả về tiếp theoĐiều gì xảy ra khi iterator hết giá trị?
>>>
for i = 1 to 10
5Nếu tất cả các giá trị từ một trình vòng lặp đã được trả về, thì lệnh gọi
for i = 1 to 10
50 tiếp theo sẽ tạo ra một ngoại lệ for i = 1 to 10
59. 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ôngBạn chỉ có thể lấy các giá trị từ một trình vòng lặp theo một hướng. Bạn không thể đi lùi. Không có chức năng
for in :
70. Nhưng bạn có thể định nghĩa hai trình vòng lặp độc lập trên cùng một đối tượng có thể lặp lại>>>
for in :
7Ngay cả khi biến vòng lặp
for in :
71 đã ở cuối danh sách, thì for in :
72 vẫn ở đầu danh sách. Mỗi iterator duy trì trạng thái bên trong của chính nó, độc lập với các iterator khácNếu bạn muốn lấy tất cả các giá trị từ một trình vòng lặp cùng một lúc, bạn có thể sử dụng hàm
for in :
73 tích hợp. Trong số các cách sử dụng có thể khác, for in :
73 lấy một trình vòng lặp làm đối số của nó và trả về một danh sách bao gồm tất cả các giá trị mà trình vòng lặp mang lại>>>
for in :
10Tương tự, các hàm
for in :
75 và for in :
76 tích hợp trả về một bộ và một tập hợp tương ứng từ tất cả các giá trị mà trình vòng lặp mang lại>>>
for in :
11Không nhất thiết phải tạo thói quen này. Một phần của sự sang trọng của iterators là chúng “lười. ” Điều đó có nghĩa là khi bạn tạo một trình vòng lặp, nó không tạo ra tất cả các mục mà nó có thể mang lại ngay lúc đó. Nó đợi cho đến khi bạn yêu cầu họ với
for i = 1 to 10
50. Các mục không được tạo cho đến khi chúng được yêu cầuKhi bạn sử dụng
for in :
73, for in :
75 hoặc tương tự, bạn đang buộc trình vòng lặp tạo tất cả các giá trị của nó cùng một lúc, vì vậy tất cả chúng có thể được trả về. Nếu tổng số đối tượng mà trình vòng lặp trả về rất lớn, có thể mất nhiều thời gianTrên thực tế, có thể tạo một trình lặp trong Python trả về một chuỗi đối tượng vô tận bằng cách sử dụng các hàm tạo và
for in :
100. Nếu bạn cố lấy tất cả các giá trị cùng một lúc từ trình lặp vô tận, chương trình sẽ bị treoLoại bỏ các quảng cáoBản lĩnh của vòng lặp for in :
0 của Python
for in :
Bây giờ bạn đã được giới thiệu tất cả các khái niệm cần thiết để hiểu đầy đủ về cách thức hoạt động của vòng lặp
for in :
0 trong Python. Trước khi tiếp tục, hãy xem lại các điều khoản có liên quanTermMeaningIterationQuá trình lặp qua các đối tượng hoặc mục trong một bộ sưu tậpIterableMột đối tượng [hoặc tính từ được sử dụng để mô tả một đối tượng] có thể được lặp quaIteratorĐối tượng tạo ra các mục hoặc giá trị liên tiếp từ iterable được liên kết của nó
for in :
47Hàm tích hợp được sử dụng để lấy một trình vòng lặp từ một Bây giờ, hãy xem xét lại vòng lặp
for in :
0 đơn giản được trình bày ở phần đầu của hướng dẫn này>>>
for in :
2Vòng lặp này có thể được mô tả hoàn toàn bằng các khái niệm bạn vừa học về. Để thực hiện phép lặp mà vòng lặp
for in :
0 này mô tả, Python thực hiện như sau- Các cuộc gọi
47 để lấy một trình vòng lặp chofor in :
26for in :
- Gọi liên tục
50 để lấy lần lượt từng mục từ iteratorfor i = 1 to 10
- Chấm dứt vòng lặp khi
50 tăng ngoại lệfor i = 1 to 10
59for i = 1 to 10
Thân vòng lặp được thực thi một lần cho mỗi mục
for i = 1 to 10
50 trả về, với biến vòng lặp for in :
7 được đặt thành mục đã cho cho mỗi lần lặpChuỗi sự kiện này được tóm tắt trong sơ đồ sau
Có lẽ điều này có vẻ giống như rất nhiều công việc khỉ không cần thiết, nhưng lợi ích là đáng kể. Python xử lý việc lặp qua tất cả các lần lặp theo cách chính xác theo cách này và trong Python, rất nhiều lần lặp và trình vòng lặp
Nhiều đối tượng tích hợp và thư viện có thể lặp lại
Có một mô-đun Thư viện chuẩn có tên là
100 chứa nhiều hàm trả về các lần lặpfor in :
Các đối tượng do người dùng định nghĩa được tạo bằng khả năng hướng đối tượng của Python có thể được lặp lại
Python có một cấu trúc được gọi là trình tạo cho phép bạn tạo trình vòng lặp của riêng mình theo cách đơn giản, dễ hiểu
Bạn sẽ khám phá thêm về tất cả những điều trên trong suốt loạt bài này. Tất cả chúng đều có thể là mục tiêu của vòng lặp
for in :
0 và cú pháp giống nhau trên bảng. Nó thanh lịch trong sự đơn giản và cực kỳ linh hoạtLặp lại thông qua một từ điển
Trước đó bạn đã thấy rằng một trình vòng lặp có thể được lấy từ một từ điển có
for in :
47, vì vậy bạn biết rằng các từ điển phải có thể lặp lại được. Điều gì xảy ra khi bạn lặp qua một từ điển? >>>
for in :
13Như bạn có thể thấy, khi một vòng lặp
for in :
0 lặp qua một từ điển, biến vòng lặp được gán cho các khóa của từ điểnĐể truy cập các giá trị từ điển trong vòng lặp, bạn có thể tạo tham chiếu từ điển bằng cách sử dụng khóa như bình thường
>>>
for in :
14Bạn cũng có thể lặp lại trực tiếp các giá trị của từ điển bằng cách sử dụng
for in :
117>>>
for in :
15Trên thực tế, bạn có thể lặp lại đồng thời cả khóa và giá trị của từ điển. Đó là bởi vì biến vòng lặp của vòng lặp
for in :
0 không chỉ giới hạn ở một biến duy nhất. Nó cũng có thể là một bộ, trong trường hợp đó, các phép gán được thực hiện từ các mục trong khả năng lặp lại bằng cách sử dụng đóng gói và giải nén, giống như với một câu lệnh gán>>>
for in :
16Như đã lưu ý trong hướng dẫn về từ điển Python, phương thức từ điển
for in :
119 trả về một cách hiệu quả danh sách các cặp khóa/giá trị dưới dạng bộ dữ liệu>>>
for in :
17Do đó, cách Pythonic để lặp qua từ điển truy cập cả khóa và giá trị trông như thế này
>>>
for in :
18Loại bỏ các quảng cáoHàm for in :
120
for in :
Trong phần đầu tiên của hướng dẫn này, bạn đã thấy một loại vòng lặp
for in :
0 được gọi là vòng lặp phạm vi số, trong đó các giá trị số bắt đầu và kết thúc được chỉ định. Mặc dù dạng vòng lặp for in :
0 này không được tích hợp trực tiếp vào Python, nhưng nó có thể dễ dàng truy cậpVí dụ: nếu bạn muốn lặp qua các giá trị từ
for in :
123 đến for in :
124, bạn chỉ cần làm điều này>>>
for in :
19Giải pháp này không quá tệ khi chỉ có một vài con số. Nhưng nếu phạm vi số lớn hơn nhiều, nó sẽ trở nên tẻ nhạt khá nhanh
Rất may, Python cung cấp một tùy chọn tốt hơn—hàm
for in :
120 tích hợp sẵn, trả về một lần lặp có thể tạo ra một chuỗi các số nguyênfor in :
126 trả về một iterable mang lại các số nguyên bắt đầu bằng for in :
123, tối đa nhưng không bao gồm for in :
128>>>
for in :
20Lưu ý rằng
for in :
120 trả về một đối tượng của lớp for in :
130, không phải danh sách hoặc bộ giá trị. Bởi vì một đối tượng for in :
130 là một đối tượng có thể lặp lại, bạn có thể lấy các giá trị bằng cách lặp lại chúng bằng một vòng lặp for in :
0>>>
for in :
21Bạn cũng có thể lấy tất cả các giá trị cùng một lúc với
for in :
73 hoặc for in :
75. Trong phiên REPL, đó có thể là một cách thuận tiện để hiển thị nhanh các giá trị>>>
for in :
22Tuy nhiên, khi
for in :
120 được sử dụng trong mã là một phần của ứng dụng lớn hơn, thì việc sử dụng for in :
73 hoặc for in :
75 theo cách này thường được coi là thông lệ kém. Giống như các trình vòng lặp, các đối tượng for in :
130 lười biếng—các giá trị trong phạm vi đã chỉ định không được tạo cho đến khi chúng được yêu cầu. Sử dụng for in :
73 hoặc for in :
75 trên đối tượng for in :
130 buộc tất cả các giá trị được trả về cùng một lúc. Điều này hiếm khi cần thiết và nếu danh sách dài, nó có thể lãng phí thời gian và bộ nhớfor in :
142 trả về một iterable mang lại các số nguyên bắt đầu bằng for in :
143, tối đa nhưng không bao gồm for in :
128. Nếu được chỉ định, for in :
145 cho biết số tiền cần bỏ qua giữa các giá trị [tương tự như giá trị sải chân được sử dụng để cắt chuỗi và danh sách]>>>
for in :
23Nếu bỏ qua
for in :
145, nó sẽ mặc định là for in :
8>>>
for in :
24Tất cả các tham số được chỉ định cho
for in :
120 phải là số nguyên, nhưng bất kỳ tham số nào cũng có thể là số âm. Đương nhiên, nếu for in :
143 lớn hơn for in :
128, thì for in :
145 phải âm [nếu bạn muốn có bất kỳ kết quả nào]>>>
for in :
25Lưu ý kỹ thuật. Nói một cách chính xác,
for in :
120 không chính xác là một chức năng tích hợp sẵn. Nó được triển khai như một lớp có thể gọi được để tạo ra một loại trình tự bất biến. Nhưng đối với các mục đích thực tế, nó hoạt động giống như một chức năng tích hợp sẵnĐể biết thêm thông tin về
for in :
120, hãy xem bài viết Real Python Hàm for in :
120 của Python [Hướng dẫn]Loại bỏ các quảng cáoThay đổi hành vi vòng lặp for in :
0
for in :
Bạn đã thấy trong phần hướng dẫn trước của loạt bài giới thiệu này cách thực thi vòng lặp
for in :
1 có thể bị gián đoạn bằng câu lệnh for in :
157 và for in :
158 và được sửa đổi bằng mệnh đề for in :
159. Các khả năng này cũng có sẵn với vòng lặp for in :
0Tuyên bố for in :
157 và for in :
158
for in :
for in :
for in :
157 và for in :
158 hoạt động theo cách tương tự với các vòng lặp for in :
0 cũng như với các vòng lặp for in :
1. for in :
157 kết thúc vòng lặp hoàn toàn và chuyển sang câu lệnh đầu tiên sau vòng lặp>>>
for in :
26for in :
158 kết thúc lần lặp hiện tại và chuyển sang lần lặp tiếp theo>>>
for in :
27Điều khoản for in :
159
for in :
Vòng lặp
for in :
0 cũng có thể có mệnh đề for in :
159. Diễn giải tương tự như của vòng lặp for in :
1. Mệnh đề for in :
159 sẽ được thực thi nếu vòng lặp kết thúc do hết khả năng lặp>>>
for in :
28Mệnh đề
for in :
159 sẽ không được thực thi nếu danh sách bị phá vỡ bằng câu lệnh for in :
157>>>
for in :
29Phần kết luận
Hướng dẫn này trình bày về vòng lặp
for in :
0, đặc điểm của phép lặp xác định trong PythonBạn cũng đã tìm hiểu về hoạt động bên trong của iterables và iterators, hai loại đối tượng quan trọng làm nền tảng cho phép lặp xác định, nhưng cũng xuất hiện nổi bật trong nhiều loại mã Python khác
Trong hai hướng dẫn tiếp theo của loạt bài giới thiệu này, bạn sẽ sang số một chút và khám phá cách các chương trình Python có thể tương tác với người dùng thông qua đầu vào từ bàn phím và đầu ra cho bảng điều khiển
« Vòng lặp "trong khi" của Python [Lặp lại vô thời hạn]
Vòng lặp "cho" Python [Lặp lại xác định]
Nhập và xuất cơ bản trong Python »
Đánh dấu là đã hoàn thành
Xem ngay Hướng dẫn này có một khóa học video liên quan do nhóm Real Python tạo. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn. Đối với vòng lặp trong Python [Lặp lại xác định]
🐍 Thủ thuật Python 💌
Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python
Gửi cho tôi thủ thuật Python »
Giới thiệu về John Sturtz
John là một Pythonista cuồng nhiệt và là thành viên của nhóm hướng dẫn Real Python
» Thông tin thêm về JohnMỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là
Aldren
David
Joanna
Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực
Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia
Nâng cao kỹ năng Python của bạn »
Bậc thầy Kỹ năng Python trong thế giới thực
Với quyền truy cập không giới hạn vào Python thực
Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia
Nâng cao kỹ năng Python của bạn »
Bạn nghĩ sao?
Đánh giá bài viết này
Tweet Chia sẻ Chia sẻ EmailBài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?
Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. Nhận các mẹo để đặt câu hỏi hay và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi