Hướng dẫn how to use iteration in python - cách sử dụng phép lặp trong python
Xem bây giờ hướng dẫn này có một khóa học video liên quan được tạo bởi nhóm Python thực sự. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn về sự hiểu biết của bạn: Đối với các vòng lặp trong Python (Lặp lại xác định) This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: For Loops in Python (Definite Iteration) Show
Hướng dẫn này sẽ chỉ cho bạn cách thực hiện lần lặp xác định với vòng lặp Python 0.definite iteration with a Python 0 loop.Trong hướng dẫn trước đây trong loạt giới thiệu này, bạn đã học được như sau:
Ở đây, những gì bạn bao gồm trong hướng dẫn này:
Một cuộc khảo sát về lặp lại xác định trong lập trìnhCác vòng lặp xác định thường được gọi là các vòng 0 vì 0 là từ khóa được sử dụng để giới thiệu chúng trong gần như tất cả các ngôn ngữ lập trình, bao gồm cả Python. 0 loops because 0 is the
keyword that is used to introduce them in nearly all programming languages, including Python.Trong lịch sử, các ngôn ngữ lập trình đã cung cấp một vài hương vị của vòng lặp 0. Đây được mô tả ngắn gọn trong các phần sau.Vòng lặp phạm vi sốVòng lặp 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ày:
Ở đây, cơ thể của vòng lặp được thực hiện mười lần. Biến 7 giả định giá trị 8 trên lần lặp thứ nhất, 9 trên thứ hai, v.v. Loại vòng lặp 0 này được sử dụng trong các ngôn ngữ cơ bản, algol và pascal.Vòng lặp ba biểu hiệnMột hình thức khác của vòng lặp 0 được phổ biến bởi ngôn ngữ lập trình C chứa ba phần:
Loại vòng lặp này có hình thức sau:
Vòng lặp này được giải thích như sau:
Các vòng lặp ba biểu hiện 0 rất phổ biến vì các biểu thức được chỉ định cho ba phần có thể là gần như mọi thứ, vì vậy điều này có độ 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 0 này cũng được giới thiệu trong các ngôn ngữ C ++, Java, PHP và Perl.Vòng lặp dựa trên bộ sưu tập hoặc dựa trên vòng lặpLoại vòng lặp này lặp lại trên 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ố:
Mỗi lần thông qua vòng lặp, biến 7 có giá trị của đối tượng tiếp theo trong 0. Loại vòng 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 2 thay vì 0.Vòng lặp Python for in |
Được rồi, bây giờ bạn biết ý nghĩa của một đối tượng là có thể sử dụng được và bạn biết cách sử dụng 4 để lấy một trình lặp từ nó. Một khi bạn đã có một người lặp, bạn có thể làm gì với nó? | Một iterator về cơ bản là một nhà sản xuất giá trị mang lại các giá trị liên tiếp từ đối tượng có thể đánh giá cao của nó. Hàm tích hợp 7 được sử dụng để có được giá trị tiếp theo từ trong Iterator. |
---|---|
Dưới đây là một ví dụ sử dụng cùng một danh sách như trên: | Trong ví dụ này, 3 là một danh sách có thể lặp lại và 9 là trình lặp liên quan, thu được với 4. Mỗi cuộc gọi 1 có được giá trị tiếp theo từ 9. |
Lưu ý làm thế nào một trình lặp lại giữ trạng thái của nó trong nội bộ. Nó biết những giá trị nào đã được lấy, vì vậy khi bạn gọi 7, nó biết giá trị nào sẽ trả về tiếp theo.
| Điều gì xảy ra khi trình lặp hết giá trị? Hãy để Lừa thực hiện thêm một cuộc gọi 7 trên trình lặp ở trên: |
Nếu tất cả các giá trị từ một trình lặp đã được trả về, một cuộc gọi 7 tiếp theo sẽ tăng một ngoại lệ 6. Bất kỳ nỗ lực nào nữa để có được các giá trị từ trình lặp sẽ thất bại.
| Bạn chỉ có thể có được các giá trị từ một trình lặp theo một hướng. Bạn có thể đi lùi. Không có chức năng 7. Nhưng bạn có thể xác định hai lần lặp độc lập trên cùng một đối tượng có thể lặp lại: |
4
| Ngay cả khi Iterator 8 đã ở cuối danh sách, 9 vẫn ở đầu. Mỗi iterator duy trì trạng thái nội bộ của riêng mình, không phụ thuộc vào cái khác. |
Bây giờ, hãy xem xét lại vòng lặp
for <var> in <iterable>:
<statement(s)>
0 đơn giản được trình bày khi bắt đầu hướng dẫn này:>>>
>>> a = ['foo', 'bar', 'baz']
>>> for i in a:
... print(i)
...
foo
bar
baz
Vòng lặp này có thể được mô tả hoàn toàn theo các khái niệm bạn vừa biết. Để thực hiện vòng lặp này, vòng lặp
for <var> in <iterable>:
<statement(s)>
0 mô tả, Python làm như sau:- Gọi
4 để có được trình lặp lại cho>>> a = ['foo', 'bar', 'baz'] >>> itr = iter(a) >>> itr
>>> next(itr) 'foo' >>> next(itr) 'bar' >>> next(itr) 'baz'
3>>> iter(42) # Integer Traceback (most recent call last): File "
" , line 1, initer(42) TypeError: 'int' object is not iterable >>> iter(3.1) # Float Traceback (most recent call last): File " " , line 1, initer(3.1) TypeError: 'float' object is not iterable >>> iter(len) # Built-in function Traceback (most recent call last): File " " , line 1, initer(len) TypeError: 'builtin_function_or_method' object is not iterable - Gọi
7 liên tục để lần lượt lấy từng mục từ trình lặp lại>>> a = ['foo', 'bar', 'baz'] >>> itr = iter(a) >>> itr
>>> next(itr) 'foo' >>> next(itr) 'bar' >>> next(itr) 'baz' - Chấm dứt vòng lặp khi
7 tăng ngoại lệ>>> a = ['foo', 'bar', 'baz'] >>> itr = iter(a) >>> itr
>>> next(itr) 'foo' >>> next(itr) 'bar' >>> next(itr) 'baz'
6>>> next(itr) Traceback (most recent call last): File "
" , line 1, innext(itr) StopIteration
Cơ thể vòng lặp được thực hiện một lần cho mỗi mục
>>> a = ['foo', 'bar', 'baz']
>>> itr = iter(a)
>>> itr
>>> next(itr)
'foo'
>>> next(itr)
'bar'
>>> next(itr)
'baz'
7 trả về, với biến vòng for <var> in <iterable>:
<statement(s)>
7 được đặt thành mục đã cho cho mỗi lần lặp.Trình tự các sự kiện này được tóm tắt trong sơ đồ sau:
Có lẽ điều này có vẻ như rất nhiều hoạt động kinh doanh khỉ không cần thiết, nhưng lợi ích là đáng kể. Python xử lý lặp lại tất cả các vòng lặp theo cách chính xác theo cách này, và trong Python, Iterables và Iterators rất nhiều:
Nhiều đối tượng tích hợp và thư viện là có thể sử dụng được.
Có một mô -đun thư viện tiêu chuẩn gọi là
7 chứa nhiều chức năng trả về Iterables.>>> a ['foo', 'bar', 'baz'] >>> itr1 = iter(a) >>> itr2 = iter(a) >>> next(itr1) 'foo' >>> next(itr1) 'bar' >>> next(itr1) 'baz' >>> next(itr2) 'foo'
Có thể tạo ra các đối tượng do người dùng xác định với khả năng hướng đối tượng Python có thể được thực hiện để có thể sử dụng được.
Python có tính năng cấu trúc gọi là trình tạo cho phép bạn tạo trình lặp của riêng mình một cách đơn giản, đơn giản.
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 có thể là mục tiêu của vòng lặp
for <var> in <iterable>:
<statement(s)>
0 và cú pháp giống nhau trên bảng. Nó thanh lịch trong sự đơn giản và linh hoạt.Lặp lại thông qua một từ điển
Bạn đã thấy trước đó rằng một trình lặp có thể được lấy từ một từ điển với
>>> a = ['foo', 'bar', 'baz']
>>> itr = iter(a)
>>> itr
>>> next(itr)
'foo'
>>> next(itr)
'bar'
>>> next(itr)
'baz'
4, vì vậy bạn biết từ điển phải có thể sử dụng được. Điều gì xảy ra khi bạn lặp qua một từ điển? Hãy xem nào:>>>
for (i = 1; i <= 10; i++)
<loop body>
3Như bạn có thể thấy, khi một vòng lặp
for <var> in <iterable>:
<statement(s)>
0 lặp qua từ điển, biến vòng lặp được gán cho các khóa từ điển.Để truy cập các giá trị từ điển trong vòng lặp, bạn có thể thực hiện tham chiếu từ điển bằng cách sử dụng khóa như bình thường:
>>>
for (i = 1; i <= 10; i++)
<loop body>
4Bạn cũng có thể lặp lại thông qua các giá trị từ điển trực tiếp bằng cách sử dụng
for (i = 1; i <= 10; i++)
<loop body>
14:>>>
for (i = 1; i <= 10; i++)
<loop body>
5Trên thực tế, bạn có thể lặp lại cả các khóa và giá trị của từ điển đồng thời. Đó là bởi vì biến vòng lặp của vòng lặp
for <var> in <iterable>:
<statement(s)>
0 không chỉ giới hạn ở một biến duy nhất. Nó cũng có thể là một tuple, trong trường hợp đó, các bài tập được thực hiện từ các mục trong sự khác biệt 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 (i = 1; i <= 10; i++)
<loop body>
6Như đã lưu ý trong hướng dẫn về từ điển Python, phương thức từ điển
for (i = 1; i <= 10; i++)
<loop body>
16 Trả về một cách hiệu quả một danh sách các cặp khóa/giá trị dưới dạng bộ dữ liệu:>>>
for (i = 1; i <= 10; i++)
<loop body>
7Do đó, cách pythonic để lặp lại thông qua từ điển truy cập cả các khóa và giá trị trông như thế này:
>>>
for (i = 1; i <= 10; i++)
<loop body>
8Hàm for (i = 1; i <= 10; i++)
17
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 <var> in <iterable>:
<statement(s)>
0 được gọi là vòng lặp phạm vi số, trong đó bắt đầu và kết thúc các giá trị số được chỉ định. Mặc dù hình thức vòng lặp for <var> in <iterable>:
<statement(s)>
0 này được tích hợp trực tiếp vào Python, nhưng nó dễ dàng đến.Ví dụ: nếu bạn muốn lặp lại thông qua các giá trị từ
for (i = 1; i <= 10; i++)
<loop body>
20 đến for (i = 1; i <= 10; i++)
<loop body>
21, bạn có thể chỉ cần làm điều này:>>>
for (i = 1; i <= 10; i++)
<loop body>
9Giả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.
Hạnh phúc thay, Python cung cấp một tùy chọn tốt hơn, chức năng
for (i = 1; i <= 10; i++)
<loop body>
17 tích hợp, trả về một thứ có thể mang lại một chuỗi số nguyên.for (i = 1; i <= 10; i++)
<loop body>
23 trả về một số lượng có thể mang lại số nguyên bắt đầu bằng for (i = 1; i <= 10; i++)
<loop body>
20, cho đến nhưng không bao gồm for (i = 1; i <= 10; i++)
<loop body>
25:>>>
for i in <collection>
<loop body>
0Lưu ý rằng
for (i = 1; i <= 10; i++)
<loop body>
17 trả về một đối tượng của lớp for (i = 1; i <= 10; i++)
<loop body>
27, không phải là danh sách hoặc tuple của các giá trị. Bởi vì một đối tượng for (i = 1; i <= 10; i++)
<loop body>
27 là một điều có thể đi được, bạn có thể thu được các giá trị bằng cách lặp lại chúng bằng một vòng lặp for <var> in <iterable>:
<statement(s)>
0:>>>
for i in <collection>
<loop body>
1Bạn cũng có thể lấy tất cả các giá trị cùng một lúc với
>>> a
['foo', 'bar', 'baz']
>>> itr1 = iter(a)
>>> itr2 = iter(a)
>>> next(itr1)
'foo'
>>> next(itr1)
'bar'
>>> next(itr1)
'baz'
>>> next(itr2)
'foo'
0 hoặc >>> a
['foo', 'bar', 'baz']
>>> itr1 = iter(a)
>>> itr2 = iter(a)
>>> next(itr1)
'foo'
>>> next(itr1)
'bar'
>>> next(itr1)
'baz'
>>> next(itr2)
'foo'
2. Trong một phiên thay thế, đó có thể là một cách thuận tiện để nhanh chóng hiển thị các giá trị là gì:>>>
for i in <collection>
<loop body>
2Tuy nhiên, khi
for (i = 1; i <= 10; i++)
<loop body>
17 được sử dụng trong mã là một phần của ứng dụng lớn hơn, nó thường được coi là thực hành kém để sử dụng >>> a
['foo', 'bar', 'baz']
>>> itr1 = iter(a)
>>> itr2 = iter(a)
>>> next(itr1)
'foo'
>>> next(itr1)
'bar'
>>> next(itr1)
'baz'
>>> next(itr2)
'foo'
0 hoặc >>> a
['foo', 'bar', 'baz']
>>> itr1 = iter(a)
>>> itr2 = iter(a)
>>> next(itr1)
'foo'
>>> next(itr1)
'bar'
>>> next(itr1)
'baz'
>>> next(itr2)
'foo'
2 theo cách này. Giống như trình lặp, các đối tượng for (i = 1; i <= 10; i++)
<loop body>
27 là lười biếng, các giá trị trong phạm vi được chỉ định không được tạo cho đến khi chúng được yêu cầu. Sử dụng >>> a
['foo', 'bar', 'baz']
>>> itr1 = iter(a)
>>> itr2 = iter(a)
>>> next(itr1)
'foo'
>>> next(itr1)
'bar'
>>> next(itr1)
'baz'
>>> next(itr2)
'foo'
0 hoặc >>> a
['foo', 'bar', 'baz']
>>> itr1 = iter(a)
>>> itr2 = iter(a)
>>> next(itr1)
'foo'
>>> next(itr1)
'bar'
>>> next(itr1)
'baz'
>>> next(itr2)
'foo'
2 trên đối tượng for (i = 1; i <= 10; i++)
<loop body>
27 buộc tất cả các giá trị sẽ đượ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à trí nhớ.for (i = 1; i <= 10; i++)
<loop body>
39 trả về một số lượng có thể mang lại số nguyên bắt đầu bằng for (i = 1; i <= 10; i++)
<loop body>
40, cho đến nhưng không bao gồm for (i = 1; i <= 10; i++)
<loop body>
25. Nếu được chỉ định, for (i = 1; i <= 10; i++)
<loop body>
42 cho biết số lượng bỏ qua giữa các giá trị (tương tự với giá trị sải chân được sử dụng cho chuỗi và cắt danh sách):>>>
for i in <collection>
<loop body>
3Nếu
for (i = 1; i <= 10; i++)
<loop body>
42 bị bỏ qua, nó mặc định là for <var> in <iterable>:
<statement(s)>
8:>>>
for i in <collection>
<loop body>
4Tất cả các tham số được chỉ định cho
for (i = 1; i <= 10; i++)
<loop body>
17 phải là số nguyên, nhưng bất kỳ tham số nào có thể âm. Đương nhiên, nếu for (i = 1; i <= 10; i++)
<loop body>
40 lớn hơn for (i = 1; i <= 10; i++)
<loop body>
25, for (i = 1; i <= 10; i++)
<loop body>
42 phải âm (nếu bạn muốn có bất kỳ kết quả nào):>>>
for i in <collection>
<loop body>
5Thay đổi hành vi vòng lặp for in :
0
Bạn đã thấy trong hướng dẫn trước đây trong loạt giới thiệu này làm thế nào việc thực hiện vòng lặp
for <var> in <iterable>:
<statement(s)>
1 có thể bị gián đoạn với các câu lệnh for (i = 1; i <= 10; i++)
<loop body>
51 và for (i = 1; i <= 10; i++)
<loop body>
52 và được sửa đổi bằng mệnh đề for (i = 1; i <= 10; i++)
<loop body>
53. Những khả năng này cũng có sẵn với vòng lặp for <var> in <iterable>:
<statement(s)>
0.Các câu lệnh for (i = 1; i <= 10; i++)
51 và for (i = 1; i <= 10; i++)
52
for (i = 1; i <= 10; i++)
<loop body>
51 và for (i = 1; i <= 10; i++)
<loop body>
52 hoạt động theo cách tương tự với các vòng lặp for <var> in <iterable>:
<statement(s)>
0 như với các vòng for <var> in <iterable>:
<statement(s)>
1. for (i = 1; i <= 10; i++)
<loop body>
51 chấm dứt hoàn toàn vòng lặp và tiến hành câu lệnh đầu tiên sau vòng lặp:>>>
for i in <collection>
<loop body>
6for (i = 1; i <= 10; i++)
<loop body>
52 chấm dứt lần lặp hiện tại và tiến hành lần lặp tiếp theo:
>>>
for i in <collection>
<loop body>
7Điều khoản for (i = 1; i <= 10; i++)
53
Một vòng lặp
for <var> in <iterable>:
<statement(s)>
0 cũng có thể có mệnh đề for (i = 1; i <= 10; i++)
<loop body>
53. Việc giải thích tương tự như vòng lặp for <var> in <iterable>:
<statement(s)>
1. Điều khoản for (i = 1; i <= 10; i++)
<loop body>
53 sẽ được thực thi nếu vòng lặp chấm dứt thông qua sự kiệt sức của điều đó:>>>
for i in <collection>
<loop body>
8Điều khoản
for (i = 1; i <= 10; i++)
<loop body>
53 won won sẽ được thực thi nếu danh sách bị chia tay bằng tuyên bố for (i = 1; i <= 10; i++)
<loop body>
51:>>>
for i in <collection>
<loop body>
9Sự kết luận
Hướng dẫn này đã trình bày vòng lặp
for <var> in <iterable>:
<statement(s)>
0, công việc của sự lặp lại xác định trong Python.definite iteration in Python.Bạn cũng đã tìm hiểu về các hoạt động bên trong của các phép lặp và lặp, 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 nổi bật trong một loạt các mã Python khác.iterables and iterators, two important object types that underlie definite iteration, but also figure prominently in a wide variety of other Python code.
Trong hai hướng dẫn tiếp theo trong chuỗi giới thiệu này, bạn sẽ chuyển bánh răng 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 vào bảng điều khiển.input from the keyboard and output to the console.
Xem bây giờ hướng dẫn này có một khóa học video liên quan được tạo bởi nhóm Python thực sự. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn về sự hiểu biết của bạn: Đối với các vòng lặp trong Python (Lặp lại xác định) This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: For Loops in Python (Definite Iteration)