Hướng dẫn understanding for loops python - sự hiểu biết cho các vòng lặp python

Một vòng lặp pythonic rất khác với các vòng lặp của ngôn ngữ lập trình khác. Một vòng lặp trong Python được sử dụng để lặp qua một trình lặp, tuy nhiên trong các ngôn ngữ khác, nó được sử dụng để lặp qua một điều kiện. Trong bài viết này, chúng tôi sẽ đi sâu hơn vào vòng lặp pythonic và chứng kiến ​​lý do đằng sau sự không giống nhau này. Hãy để bắt đầu bằng cách làm quen với các gotchas vòng lặp:

Gotchas trong vòng lặp

Nếu một người không biết ý nghĩa của Got Gotcha có nghĩa là gì: một got gotcha trong mã hóa là một thuật ngữ được sử dụng cho một tính năng của ngôn ngữ lập trình [giả sử vòng lặp, chức năng, câu lệnh trả về, v.v.] Một hành vi không phù hợp với kết quả mong đợi. Dưới đây là hai gotchas khét tiếng cho vòng lặp:

Xem xét ví dụ này:

numList = [0, ____________, 2,

0 
4 
16
1____________
0 
4 
16
3
0 
4 
16
4

0 
4 
16
5=
0 
4 
16
7
0 
4 
16
8
0 
4 
16
82 numList 1

Ở đây, biến numList 5 chứa một hình vuông của các yếu tố của numList 6. Nếu chúng tôi kiểm tra xem 16 có ở numList 5 hay không, chúng tôi sẽ đúng nhưng nếu chúng tôi kiểm tra lại, chúng tôi sẽ sai.

tổng của một vòng lặp:

Hãy xem này:

Các

[1= [3

0 
4 
16
8 2 numList 1 numList 2numList 3 numList 4

Chúng ta có thể biến điều này 00 thành một danh sách hoặc tuple để xem xét các yếu tố của nó. Hãy để tính toán tổng của các yếu tố trong đôi. Kết quả phải là 40 theo mong đợi. Nhưng thay vào đó chúng ta nhận được 0.
But, we get 0 instead.

Để hiểu được sự bất thường này, hãy để trước tiên xem các công việc của những kẻ lừa đảo.

Bên trong một vòng lặp

Như đã nêu trước đó, các vòng lặp của các ngôn ngữ lập trình khác, chẳng hạn như C, C ++, Java, lặp qua một điều kiện. Ví dụ:

01

numList 1 03

0405

06

Mã trên được viết bằng JavaScript. Như đã thấy, vòng lặp hoàn toàn khác với những gì chúng ta thấy trong Python. Điều này là bởi vì những gì chúng ta gọi là một vòng lặp trong Python thực sự là một vòng lặp for foreach. Một vòng lặp foreach không duy trì một bộ đếm như một vòng lặp. A for Loop hoạt động trên các chỉ số của các yếu tố của có thể thay vì chính phần tử. Nhưng một vòng lặp foreach hoạt động thẳng vào các yếu tố thay vì các chỉ số của chúng và do đó không có điều kiện, không khởi tạo và không tăng chỉ số.

numList = [0, ____________, 2,

0 
4 
16
1____________
0 
4 
16
3
0 
4 
16
4

0 
4 
16
5=
0 
4 
16
7
0 
4 
16
8
0 
4 
16
82 numList 1

041516

Ở đây, biến numList 5 chứa một hình vuông của các yếu tố của numList 6. Nếu chúng tôi kiểm tra xem 16 có ở numList 5 hay không, chúng tôi sẽ đúng nhưng nếu chúng tôi kiểm tra lại, chúng tôi sẽ sai.
One might think that Python uses indices under the hood to loop over in a for loop. But the answer is no. Let’s look at an example to prove this:
We will take the help of while loop for using indices.

tổng của một vòng lặp:

, 6

Hãy xem này:

0420

0422

Output:

Các

[1= [3
0 
4 
16
8 2 numList 1 numList 2numList 3 numList 4

Chúng ta có thể biến điều này 00 thành một danh sách hoặc tuple để xem xét các yếu tố của nó. Hãy để tính toán tổng của các yếu tố trong đôi. Kết quả phải là 40 theo mong đợi. Nhưng thay vào đó chúng ta nhận được 0.

Để hiểu được sự bất thường này, hãy để trước tiên xem các công việc của những kẻ lừa đảo.

Bên trong một vòng lặp

Như đã nêu trước đó, các vòng lặp của các ngôn ngữ lập trình khác, chẳng hạn như C, C ++, Java, lặp qua một điều kiện. Ví dụ:

15

0 
4 
16
10
0 
4 
16
11
0 
4 
16
12

15

0 
4 
16
10
0 
4 
16
11
0 
4 
16
16

15

0 
4 
16
10
0 
4 
16
11
0 
4 
16
16

numList 1 03

Mã trên được viết bằng JavaScript. Như đã thấy, vòng lặp hoàn toàn khác với những gì chúng ta thấy trong Python. Điều này là bởi vì những gì chúng ta gọi là một vòng lặp trong Python thực sự là một vòng lặp for foreach. Một vòng lặp foreach không duy trì một bộ đếm như một vòng lặp. A for Loop hoạt động trên các chỉ số của các yếu tố của có thể thay vì chính phần tử. Nhưng một vòng lặp foreach hoạt động thẳng vào các yếu tố thay vì các chỉ số của chúng và do đó không có điều kiện, không khởi tạo và không tăng chỉ số.Once an item in an iterator is all used up[iterated over], it is deleted from the memory!

numList 1 numList 22____23 13

Do đó, sẽ không sai khi nói rằng chúng ta không có vòng lặp trong Python nhưng chúng ta có các vòng lặp foreach được thực hiện dưới dạng vòng lặp! Người ta có thể nghĩ rằng Python sử dụng các chỉ số dưới mui xe để lặp lại vòng. Nhưng câu trả lời là không. Hãy cùng xem xét một ví dụ để chứng minh điều này: Chúng tôi sẽ nhận được sự trợ giúp của trong khi sử dụng các chỉ số.

Các

, 7 , 8

Điều này chứng tỏ rằng Python không sử dụng các chỉ số để lặp và vì vậy chúng ta có thể lặp lại mọi thứ bằng cách sử dụng các chỉ số. Một câu hỏi đơn giản hiện đang được đặt ra, Python sử dụng gì để lặp? Câu trả lời là, Iterators!

0 
4 
16
37
0 
4 
16
38
0 
4 
16
39

Trình lặp

Chúng tôi biết những gì Iterables là [danh sách, chuỗi, bộ dữ liệu, v.v.]. Một trình lặp có thể được coi là nguồn cung cấp năng lượng của các vòng lặp. Một điều có thể được tạo thành từ Iterator và đây là thực tế giúp Python lặp đi lặp lại. Để trích xuất trình lặp lại từ một điều có thể sử dụng được, chúng tôi sử dụng chức năng Python từ ____993.

Hãy nhìn vào một ví dụ:

0 
4 
16
37
0 
4 
16
53
0 
4 
16
39

0 
4 
16
4015
0 
4 
16
57

0 
4 
16
581, 2,
0 
4 
16
1,
0 
4 
16
3
0 
4 
16
66

Output:

1
2
3
4

Chúng ta cần tìm hiểu về iterators vì chúng ta làm việc với các trình lặp gần như mỗi lần với thậm chí biết về nó. Ví dụ phổ biến nhất là một máy phát điện. Một máy phát điện là một trình lặp. Chúng ta có thể áp dụng từng chức năng của một trình lặp cho một trình tạo.

Các

0 
4 
16
5=
0 
4 
16
7
0 
4 
16
8__

15

0 
4 
16
10
0 
4 
16
11
0 
4 
16
89

15

0 
4 
16
10
0 
4 
16
11
0 
4 
16
89

15

0 
4 
16
10
0 
4 
16
11
0 
4 
16
89

Output:

0 
4 
16

Giải quyết vòng lặp Gotchas

Bây giờ chúng ta đã biết chính xác những gì là vòng lặp và làm thế nào để chúng làm việc trong Python, chúng ta sẽ kết thúc bài viết này từ nơi chúng ta bắt đầu, nghĩa là bằng cách cố gắng đưa ra các vòng lặp Gotchas như đã thấy trước đó.

Làm cạn kiệt một người lặp một phần:

Khi chúng tôi đã làm:

numList = [0, ____________, 2,

0 
4 
16
1____________
0 
4 
16
3
0 
4 
16
4

0 
4 
16
5=
0 
4 
16
7
0 
4 
16
8
0 
4 
16
82 numList 1

Và hỏi liệu 9 có ở trong numList 5 không, chúng tôi đã đúng. Nhưng hỏi lại cho trả lại sai. Điều này là do khi chúng tôi lần đầu tiên hỏi liệu 9 có ở đó không, nó lặp đi lặp lại trên trình lặp [trình tạo] để tìm 9 và chúng tôi biết rằng ngay khi mục tiếp theo trong trình lặp lại, mục trước đó đã bị xóa. Đây là lý do tại sao một lần chúng tôi tìm thấy 9, tất cả các số trước khi 9 bị xóa và yêu cầu lại trả về sai. Do đó chúng tôi đã cạn kiệt một phần.

Làm cạn kiệt một lần lặp hoàn toàn:

Trong mã này:

Các

[1= [3

0 
4 
16
8 2 numList 1 numList 2numList 3 numList 4

Khi chúng tôi chuyển đổi 00 thành danh sách, chúng tôi đã lặp lại từng mục trong trình lặp bằng cách làm như vậy. Do đó, người lặp lại hoàn toàn kiệt sức và cuối cùng, không có vật phẩm nào trong đó. Đây là lý do tại sao hàm numList 45 trên tuple trả về 0. Nếu chúng ta thực hiện tổng mà không chuyển đổi nó thành một danh sách, nó sẽ trả về đầu ra chính xác.


Bài Viết Liên Quan

Chủ Đề