Python cung cấp một trình tạo để tạo hàm lặp của riêng bạn. Trình tạo là một loại hàm đặc biệt không trả về một giá trị nào, thay vào đó, nó trả về một đối tượng trình vòng lặp với một chuỗi các giá trị. Trong hàm tạo, câu lệnh
>>> gen = mygenerator[]
>>> next[gen]
First item
10
>>> next[gen]
Second item
20
>>> next[gen]
Last item
30
3 được sử dụng thay vì câu lệnh return. Sau đây là một hàm tạo đơn giảnThí dụ. Chức năng máy phát điện
Sao chépdef mygenerator[]:
print['First item']
yield 10
print['Second item']
yield 20
print['Last item']
yield 30
Trong ví dụ trên, hàm
>>> gen = mygenerator[]
>>> next[gen]
First item
10
>>> next[gen]
Second item
20
>>> next[gen]
Last item
30
4 là hàm tạo. Nó sử dụng >>> gen = mygenerator[]
>>> next[gen]
First item
10
>>> next[gen]
Second item
20
>>> next[gen]
Last item
30
3 thay vì từ khóa trả về. Vì vậy, điều này sẽ trả về giá trị đối với từ khóa >>> gen = mygenerator[]
>>> next[gen]
First item
10
>>> next[gen]
Second item
20
>>> next[gen]
Last item
30
3 mỗi khi nó được gọi. Tuy nhiên, bạn cần tạo một iterator cho chức năng này, như hình bên dướiThí dụ. tiếp theo[]
Sao chép>>> gen = mygenerator[]
>>> next[gen]
First item
10
>>> next[gen]
Second item
20
>>> next[gen]
Last item
30
Hàm tạo không thể bao gồm từ khóa
>>> gen = mygenerator[]
>>> next[gen]
First item
10
>>> next[gen]
Second item
20
>>> next[gen]
Last item
30
7. Nếu bạn bao gồm nó, thì nó sẽ chấm dứt chức năng. Sự khác biệt giữa >>> gen = mygenerator[]
>>> next[gen]
First item
10
>>> next[gen]
Second item
20
>>> next[gen]
Last item
30
3 và >>> gen = mygenerator[]
>>> next[gen]
First item
10
>>> next[gen]
Second item
20
>>> next[gen]
Last item
30
7 là >>> gen = mygenerator[]
>>> next[gen]
First item
10
>>> next[gen]
Second item
20
>>> next[gen]
Last item
30
3 trả về một giá trị và tạm dừng việc thực thi trong khi vẫn duy trì các trạng thái bên trong, trong khi câu lệnh >>> gen = mygenerator[]
>>> next[gen]
First item
10
>>> next[gen]
Second item
20
>>> next[gen]
Last item
30
7 trả về một giá trị và kết thúc việc thực thi hàmHàm tạo sau bao gồm từ khóa trả về
Thí dụ. trở lại trong Hàm tạo
Sao chépdef mygenerator[]:
print['First item']
yield 10
print['Second item']
yield 20
print['Last item']
yield 30
1Bây giờ, thực hiện chức năng trên như hình dưới đây
Thí dụ. Chức năng máy phát điện
def mygenerator[]:
print['First item']
yield 10
print['Second item']
yield 20
print['Last item']
yield 30
2Như bạn có thể thấy, trình tạo ở trên dừng thực thi sau khi lấy mục đầu tiên vì từ khóa trả về được sử dụng sau khi
>>> gen = mygenerator[]
>>> next[gen]
First item
10
>>> next[gen]
Second item
20
>>> next[gen]
Last item
30
3 lấy mục đầu tiênSử dụng for Loop với chức năng Generator
Hàm tạo cũng có thể sử dụng vòng lặp for
Thí dụ. Sử dụng Vòng lặp For với Chức năng Trình tạo
Sao chépdef mygenerator[]:
print['First item']
yield 10
print['Second item']
yield 20
print['Last item']
yield 30
4Như bạn có thể thấy ở trên, hàm
def mygenerator[]:
print['First item']
yield 10
print['Second item']
yield 20
print['Last item']
yield 30
13 sử dụng từ khóa >>> gen = mygenerator[]
>>> next[gen]
First item
10
>>> next[gen]
Second item
20
>>> next[gen]
Last item
30
3. Trình tạo được gọi giống như một chức năng bình thường. Tuy nhiên, quá trình thực thi của nó bị tạm dừng khi gặp từ khóa >>> gen = mygenerator[]
>>> next[gen]
First item
10
>>> next[gen]
Second item
20
>>> next[gen]
Last item
30
3. Điều này sẽ gửi giá trị đầu tiên của luồng lặp đến môi trường gọi. Tuy nhiên, các biến cục bộ và trạng thái của chúng được lưu nội bộHàm tạo ở trên
def mygenerator[]:
print['First item']
yield 10
print['Second item']
yield 20
print['Last item']
yield 30
16 có thể được gọi như bên dướiThí dụ. Chức năng tạo cuộc gọi
Sao chépdef mygenerator[]:
print['First item']
yield 10
print['Second item']
yield 20
print['Last item']
yield 30
9Hàm tiếp tục khi next[] được cấp cho đối tượng iterator. Chức năng cuối cùng kết thúc khi
def mygenerator[]:
print['First item']
yield 10
print['Second item']
yield 20
print['Last item']
yield 30
17 gặp lỗi def mygenerator[]:
print['First item']
yield 10
print['Second item']
yield 20
print['Last item']
yield 30
18Trong ví dụ sau, hàm
def mygenerator[]:
print['First item']
yield 10
print['Second item']
yield 20
print['Last item']
yield 30
19 hoạt động như một trình tạo. Nó mang lại bình phương của một số liên tiếp trên mỗi lần gọi next[]Thí dụ
Sao chép>>> gen = mygenerator[]
>>> next[gen]
First item
10
>>> next[gen]
Second item
20
>>> next[gen]
Last item
30
3Đoạn script sau đây cho biết cách gọi hàm tạo ở trên
>>> gen = mygenerator[]
>>> next[gen]
First item
10
>>> next[gen]
Second item
20
>>> next[gen]
Last item
30
4Đoạn script trên sử dụng khối
def mygenerator[]:
print['First item']
yield 10
print['Second item']
yield 20
print['Last item']
yield 30
20 để xử lý lỗi def mygenerator[]:
print['First item']
yield 10
print['Second item']
yield 20
print['Last item']
yield 30
18. Nó sẽ phá vỡ vòng lặp while khi bắt gặp lỗi def mygenerator[]:
print['First item']
yield 10
print['Second item']
yield 20
print['Last item']
yield 30
18đầu ra
>>> gen = mygenerator[]
>>> next[gen]
First item
10
>>> next[gen]
Second item
20
>>> next[gen]
Last item
30
8Chúng ta có thể sử dụng vòng lặp for để duyệt qua các phần tử trên trình tạo. Trong trường hợp này, hàm
def mygenerator[]:
print['First item']
yield 10
print['Second item']
yield 20
print['Last item']
yield 30
17 được gọi ngầm và hàm def mygenerator[]:
print['First item']
yield 10
print['Second item']
yield 20
print['Last item']
yield 30
18 cũng được xử lý tự độngThí dụ. Trình tạo với vòng lặp For
Sao chép>>> gen = mygenerator[]
>>> next[gen]
First item
10
>>> next[gen]
Second item
20
>>> next[gen]
Last item
30
1đầu ra
>>> gen = mygenerator[]
>>> next[gen]
First item
10
>>> next[gen]
Second item
20
>>> next[gen]
Last item
30
0Ghi chú
Một trong những ưu điểm của trình tạo so với trình vòng lặp là các phần tử được tạo động. Vì mục tiếp theo chỉ được tạo sau khi mục đầu tiên được sử dụng, nên nó tiết kiệm bộ nhớ hơn so với trình vòng lặp
biểu thức trình tạo
Python cũng cung cấp một biểu thức trình tạo, đây là cách ngắn hơn để xác định các hàm trình tạo đơn giản. Biểu thức trình tạo là một hàm tạo ẩn danh. Sau đây là biểu thức trình tạo cho hàm
def mygenerator[]:
print['First item']
yield 10
print['Second item']
yield 20
print['Last item']
yield 30
19Thí dụ. biểu thức trình tạo
Sao chép>>> gen = mygenerator[]
>>> next[gen]
First item
10
>>> next[gen]
Second item
20
>>> next[gen]
Last item
30
1Trong ví dụ trên,
def mygenerator[]:
print['First item']
yield 10
print['Second item']
yield 20
print['Last item']
yield 30
26 là biểu thức trình tạo. Phần đầu tiên của biểu thức là giá trị >>> gen = mygenerator[]
>>> next[gen]
First item
10
>>> next[gen]
Second item
20
>>> next[gen]
Last item
30
3 và phần thứ hai là vòng lặp for với bộ sưu tậpBiểu thức trình tạo cũng có thể được truyền trong một hàm. Nó phải được thông qua mà không có dấu ngoặc đơn, như hình dưới đây
Thí dụ. Vượt qua chức năng máy phát điện
Sao chép>>> gen = mygenerator[]
>>> next[gen]
First item
10
>>> next[gen]
Second item
20
>>> next[gen]
Last item
30
2Trong ví dụ trên, một biểu thức trình tạo được chuyển mà không có dấu ngoặc đơn vào hàm tích hợp sẵn
def mygenerator[]:
print['First item']
yield 10
print['Second item']
yield 20
print['Last item']
yield 30
28