Python có mở máy phát điện không?

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ản

Thí dụ. Chức năng máy phát điện

Sao chép

def 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ưới

Thí 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àm

Hàm tạo sau bao gồm từ khóa trả về

Thí dụ. trở lại trong Hàm tạo

Sao chép

def mygenerator[]:
    print['First item']
    yield 10

    print['Second item']
    yield 20

    print['Last item']
    yield 30
1

Bâ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

Sao chép

def mygenerator[]:
    print['First item']
    yield 10

    print['Second item']
    yield 20

    print['Last item']
    yield 30
2

Như 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ên

Sử 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ép

def mygenerator[]:
    print['First item']
    yield 10

    print['Second item']
    yield 20

    print['Last item']
    yield 30
4

Như 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ưới

Thí dụ. Chức năng tạo cuộc gọi

Sao chép

def mygenerator[]:
    print['First item']
    yield 10

    print['Second item']
    yield 20

    print['Last item']
    yield 30
9

Hà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
18

Trong 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                      
8

Chú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ự động

Thí 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                      
0

Ghi 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
19

Thí 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                      
1

Trong 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ập

Biể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                      
2

Trong 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

Python có phải là một trình tạo không?

Python cung cấp 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 năng suất được sử dụng thay vì câu lệnh trả về.

Python có phải là một phạm vi máy phát điện không?

range là một lớp các đối tượng có thể lặp lại bất biến. Hành vi lặp lại của chúng có thể được so sánh với danh sách s. bạn không thể gọi trực tiếp cho họ; . Vì vậy, không, phạm vi không phải là trình tạo .

Open có trả về máy phát điện không?

Ví dụ 1. Đọc các tệp lớn . Trong trường hợp này, open[] trả về một đối tượng trình tạo mà bạn có thể lười biếng lặp lại từng dòng một.

Bộ lọc Python có phải là trình tạo không?

Sự thay thế tự nhiên cho filter[] là một biểu thức trình tạo . Đó là bởi vì filter[] trả về một trình lặp tạo ra các mục theo yêu cầu giống như một biểu thức trình tạo. Trình lặp Python được biết đến là bộ nhớ hiệu quả. Đó là lý do tại sao bộ lọc [] hiện trả về một trình vòng lặp thay vì danh sách.

Chủ Đề