CFSDN nhấn mạnh vào việc tạo ra giá trị thông qua mã nguồn mở. Chúng tôi cam kết xây dựng một nền tảng chia sẻ tài nguyên để mọi người làm CNTT có thể tìm thấy thế giới tuyệt vời của riêng mình tại đây.
Bài đăng trên blog CFSDN này phân tích các trình tạo trong Python và sự khác biệt của chúng so với các trình lặp. Bài đăng này được tác giả thu thập và biên soạn. Nếu bạn quan tâm đến bài viết này, hãy nhớ thích nó.
Trình tạo Trình tạo là một trình lặp, là một hàm đặc biệt sử dụng hoạt động yield để xây dựng một hàm thành một trình lặp. Một hàm thông thường có một điểm vào và một giá trị trả về; khi hàm được gọi, quá trình thực thi bắt đầu từ điểm vào và trả về giá trị trả về tương ứng ở cuối. Hàm được định nghĩa bởi trình tạo có nhiều mục nhập và nhiều giá trị trả về; thao tác next() được thực thi trên trình tạo để bắt đầu thực thi mã tại mục nhập của trình tạo, thao tác yield trả về một giá trị cho trình gọi và tạm dừng hàm; khi tạm dừng, môi trường thực thi hàm và các tham số được lưu; khi một thao tác next() khác được thực thi trên trình tạo, các tham số được gọi lại từ trạng thái tạm dừng và môi trường thực thi tạm dừng cuối cùng được nhập để tiếp tục thao tác tiếp theo và quy trình trên được lặp lại tại thao tác yield tiếp theo. Hoạt động lặp của Python khác với việc triển khai ngôn ngữ C. Nếu bạn sử dụng các cấu trúc dữ liệu như List, nó sẽ tiêu tốn rất nhiều nội dung; sử dụng trình tạo trong hoạt động lặp chỉ yêu cầu khởi tạo một đối tượng trong bộ nhớ, có thể giảm mức sử dụng bộ nhớ và tăng tốc độ thực hiện của hoạt động lặp.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
hai mươi mốt
hai mươi hai
|
>>>
định nghĩa
của tôiG():
...
năng suất
1
...
năng suất
2
...
năng suất
3
...
>>>g
=
của tôiG()
>>>
Kế tiếp
(tiếng Anh)
1
>>>
Kế tiếp
(tiếng Anh)
2
>>>
Kế tiếp
(tiếng Anh)
3
>>>
Kế tiếp
(tiếng Anh)
Theo dõi (cuộc gọi gần đây nhất là cuộc gọi cuối cùng):
Tài liệu
""
, đường kẻ
1
,
TRONG
Dừng Lặp Lại
>>>g2
=
của tôiG()
>>>
vì
Tôi
TRONG
g2:
...
in
(Tôi)
1
2
3
|
Biểu thức tạo cho câu lệnh...[if]... có thể được sử dụng để xây dựng một Danh sách một cách ngắn gọn và cũng có thể được sử dụng để xây dựng một trình tạo.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
>>>một
=
[
7
,
8
,
9
]
>>>b
=
[Tôi
*
*
2
vì
Tôi
TRONG
Một]
>>>b
[
49
,
64
,
81
]
>>>ib
=
(Tôi
*
*
2
vì
Tôi
TRONG
Một)
>>>ib
sự vật
tại
0x7f72291217e0
>
>>>
Kế tiếp
(tôi)
49
>>>
Kế tiếp
(tôi)
64
>>>
Kế tiếp
(tôi)
81
>>>
Kế tiếp
(tôi)
Theo dõi (cuộc gọi gần đây nhất là cuộc gọi cuối cùng):
Tài liệu
""
, đường kẻ
1
,
TRONG
Dừng Lặp Lại
|
Sự khác biệt giữa iterator và generator là iterator là một khái niệm trừu tượng hơn. Bất kỳ đối tượng nào, nếu lớp của nó có phương thức next (next python3) và phương thức iter trả về chính nó.
Mỗi trình tạo đều là một trình lặp, nhưng ngược lại thì không. Thông thường, trình tạo được tạo bằng cách gọi một hàm s bao gồm một hoặc nhiều biểu thức yield. Cũng đáp ứng định nghĩa của một trình lặp.
Khi bạn cần một lớp có một số phương thức tùy chỉnh ngoài các tính năng của trình tạo, bạn có thể sử dụng trình lặp tùy chỉnh. Nói chung, trình tạo thuận tiện và đơn giản hơn.
?
1
2
3
|
định nghĩa
hình vuông (bắt đầu, dừng):
vì
Tôi
TRONG
phạm vi
(bắt đầu, dừng lại):
năng suất
Tôi
*
Tôi
|
tương đương với biểu thức máy phát điện:
?
1
|
(Tôi
*
Tôi
vì
Tôi
TRONG
phạm vi
(bắt đầu, dừng lại))
|
Danh sách đẩy là:
?
1
|
[Tôi
*
Tôi
vì
Tôi
TRONG
phạm vi
(bắt đầu, dừng lại)]
|
Nếu bạn đang xây dựng một trình lặp tùy chỉnh:
?
1
2
3
4
5
6
7
8
9
10
11
12
|
lớp học
Hình vuông(
sự vật
):
định nghĩa
__khởi tạo__(
bản thân
, bắt đầu, dừng lại):
bản thân
.bắt đầu
=
bắt đầu
bản thân
.dừng lại
=
dừng lại
định nghĩa
__lặp lại__(
bản thân
):
trở lại
bản thân
định nghĩa
Kế tiếp
(
bản thân
):
nếu như
bản thân
.bắt đầu >
=
bản thân
.dừng lại:
nâng lên
Dừng Lặp Lại
hiện hành
=
bản thân
.bắt đầu
*
bản thân
.bắt đầu
bản thân
.bắt đầu
+
=
1
trở lại
hiện hành
|
Tại thời điểm này, bạn cũng có thể xác định phương pháp riêng của mình như:
?
1
2
|
định nghĩa
hiện hành(
bản thân
):
trở lại
bản thân
.bắt đầu
|
Điểm tương đồng giữa hai phương pháp này: Sau khi đối tượng được lặp lại, quá trình lặp lại không thể được viết lại.
Cuối cùng, bài viết này về phân tích cú pháp generator trong Python và sự khác biệt của chúng so với iterator kết thúc tại đây. Nếu bạn muốn biết thêm về phân tích cú pháp generator trong Python và sự khác biệt của chúng so với iterator, vui lòng tìm kiếm các bài viết trên CFSDN hoặc tiếp tục duyệt các bài viết liên quan. Tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .
Tôi là một lập trình viên xuất sắc, rất giỏi!