Bộ đếm lặp python

Khi một hàm được gọi và luồng thực thi tìm thấy một từ khóa năng suất trong hàm, thì việc thực thi hàm dừng tại chính dòng đó và nó trả về một đối tượng trình tạo cho người gọi

Trong hướng dẫn Python này, bạn sẽ học

  • Năng suất Python là gì?
  • cú pháp
  • Trình tạo trong Python là gì?
  • Sự khác biệt giữa chức năng Bình thường và chức năng Trình tạo
  • Làm cách nào để đọc các giá trị từ trình tạo?
  • Máy phát điện sử dụng một lần
  • Thí dụ. Trình tạo và năng suất cho Chuỗi Fibonacci
  • Thí dụ. Gọi hàm với Yield
  • Khi nào nên sử dụng Yield thay vì Return trong Python
  • Năng suất so với. Trở về

cú pháp

yield expression

Sự mô tả

Năng suất Python trả về một đối tượng trình tạo. Trình tạo là các hàm đặc biệt phải được lặp lại để nhận các giá trị

Từ khóa năng suất chuyển đổi biểu thức đã cho thành hàm trình tạo trả về đối tượng trình tạo. Để có được các giá trị của đối tượng, nó phải được lặp lại để đọc các giá trị được cung cấp cho năng suất

Thí dụ. phương pháp năng suất

Đây là một ví dụ đơn giản về năng suất. Hàm testyield[] có từ khóa lợi nhuận với chuỗi “Chào mừng bạn đến với Hướng dẫn Python của Guru99”. Khi hàm được gọi, đầu ra được in và nó cung cấp một đối tượng trình tạo thay vì giá trị thực

def testyield[]:
  yield "Welcome to Guru99 Python Tutorials"
output = testyield[]
print[output]

đầu ra

Đầu ra đã cho là một đối tượng trình tạo, có giá trị mà chúng ta đã cung cấp để tạo ra

Nhưng chúng tôi không nhận được thông báo mà chúng tôi phải đưa ra để mang lại kết quả đầu ra

Để in thông báo được cung cấp cho năng suất sẽ phải lặp lại đối tượng trình tạo như trong ví dụ bên dưới

def testyield[]:
  yield "Welcome to Guru99 Python Tutorials"

output = testyield[]
for i in output:
    print[i]

đầu ra

Welcome to Guru99 Python Tutorials

Trình tạo trong Python là gì?

Trình tạo là các hàm trả về một đối tượng trình tạo có thể lặp lại. Các giá trị từ đối tượng trình tạo được tìm nạp từng cái một thay vì danh sách đầy đủ cùng nhau và do đó để lấy các giá trị thực, bạn có thể sử dụng vòng lặp for, sử dụng phương thức next[] hoặc list[]

Sử dụng chức năng Generator

Bạn có thể tạo trình tạo bằng chức năng trình tạo và sử dụng biểu thức trình tạo

Hàm tạo giống như một hàm bình thường, thay vì có giá trị trả về, nó sẽ có từ khóa suất

Để tạo hàm tạo, bạn sẽ phải thêm từ khóa năng suất. Các ví dụ sau đây cho thấy cách tạo hàm tạo

def generator[]:
    yield "H"
    yield "E"
    yield "L"
    yield "L"
    yield "O"

test = generator[]
for i in test:
    print[i]

đầu ra

H
E
L
L
O

Sự khác biệt giữa chức năng Bình thường và chức năng Trình tạo

Hãy cho chúng tôi hiểu chức năng tạo khác với chức năng bình thường như thế nào

Có 2 hàm normal_test[] và generator_test[]

Cả hai hàm đều giả sử trả về chuỗi “Xin chào thế giới”. normal_test[] đang sử dụng return và generator_test[] đang sử dụng yield

# Normal function
def normal_test[]:
    return "Hello World"
	
#Generator function
def generator_test[]:
	yield "Hello World"
print[normal_test[]] #call to normal function
print[generator_test[]] # call to generator function

đầu ra

________số 8

The output shows that when you call the normal function normal_test[] it returns Hello World string. For a generator function with yield keyword it returns and not the string.

Đây là sự khác biệt chính giữa chức năng tạo và chức năng bình thường. Bây giờ để lấy giá trị từ đối tượng trình tạo, chúng ta cần sử dụng đối tượng bên trong vòng lặp for hoặc sử dụng phương thức next[] hoặc sử dụng list[]

print[next[generator_test[]]]  # will output Hello World

Một điểm khác biệt nữa để thêm vào hàm bình thường v/s hàm tạo là khi bạn gọi một hàm bình thường, quá trình thực thi sẽ bắt đầu và dừng khi nó được trả về và giá trị được trả về cho người gọi. Vì vậy, khi quá trình thực thi bắt đầu, bạn không thể dừng chức năng bình thường ở giữa và nó sẽ chỉ dừng khi gặp từ khóa trả về

Nhưng trong trường hợp chức năng trình tạo một khi quá trình thực thi bắt đầu khi nó nhận được năng suất đầu tiên, nó sẽ dừng thực thi và trả lại đối tượng trình tạo. Bạn có thể sử dụng đối tượng trình tạo để nhận các giá trị, đồng thời, tạm dừng và tiếp tục quay lại theo yêu cầu của bạn

Làm cách nào để đọc các giá trị từ trình tạo?

Bạn có thể đọc các giá trị từ một đối tượng trình tạo bằng cách sử dụng danh sách[], vòng lặp for và sử dụng phương thức next[]

sử dụng. danh sách[]

Danh sách là một đối tượng có thể lặp lại có các phần tử bên trong dấu ngoặc. Sử dụng list[] trên một đối tượng trình tạo sẽ cung cấp tất cả các giá trị mà trình tạo nắm giữ

def testyield[]:
  yield "Welcome to Guru99 Python Tutorials"
output = testyield[]
print[output]
0

đầu ra

def testyield[]:
  yield "Welcome to Guru99 Python Tutorials"
output = testyield[]
print[output]
1

sử dụng. tại

Trong ví dụ này, có một hàm được định nghĩa là even_numbers[] sẽ cung cấp cho bạn tất cả các số chẵn cho n được xác định. Lời gọi hàm even_numbers[] sẽ trả về một đối tượng trình tạo, được sử dụng bên trong vòng lặp for

Thí dụ

def testyield[]:
  yield "Welcome to Guru99 Python Tutorials"
output = testyield[]
print[output]
2

đầu ra

def testyield[]:
  yield "Welcome to Guru99 Python Tutorials"
output = testyield[]
print[output]
3

Sử dụng tiếp theo[]

Phương thức next[] sẽ cung cấp cho bạn mục tiếp theo trong danh sách, mảng hoặc đối tượng. Khi danh sách trống và nếu next[] được gọi, nó sẽ báo lỗi với tín hiệu stopIteration. Lỗi này, từ next[] chỉ ra rằng không còn mục nào trong danh sách

def testyield[]:
  yield "Welcome to Guru99 Python Tutorials"
output = testyield[]
print[output]
4

đầu ra

def testyield[]:
  yield "Welcome to Guru99 Python Tutorials"
output = testyield[]
print[output]
5

Máy phát điện sử dụng một lần

Trong trường hợp máy phát điện, chúng chỉ có sẵn để sử dụng một lần. Nếu bạn cố gắng sử dụng lại chúng, nó sẽ trống

Ví dụ

def testyield[]:
  yield "Welcome to Guru99 Python Tutorials"
output = testyield[]
print[output]
6

đầu ra

def testyield[]:
  yield "Welcome to Guru99 Python Tutorials"
output = testyield[]
print[output]
7

Trong trường hợp bạn muốn sử dụng lại đầu ra, bạn sẽ phải thực hiện lại lệnh gọi hàm

Thí dụ. Trình tạo và năng suất cho Chuỗi Fibonacci

Ví dụ sau đây cho thấy cách sử dụng trình tạo và năng suất trong Python. Ví dụ sẽ tạo ra chuỗi Fibonacci

def testyield[]:
  yield "Welcome to Guru99 Python Tutorials"
output = testyield[]
print[output]
8

đầu ra

def testyield[]:
  yield "Welcome to Guru99 Python Tutorials"
output = testyield[]
print[output]
9

Thí dụ. Gọi hàm với Yield

Trong ví dụ này sẽ xem cách gọi một hàm có năng suất

Ví dụ dưới đây có một hàm gọi là test[] trả về bình phương của một số đã cho. Có một chức năng khác gọi là getSquare[] sử dụng test[] với từ khóa suất. Đầu ra đưa ra giá trị bình phương cho phạm vi số đã cho

0

đầu ra

1

Khi nào nên sử dụng Yield thay vì Return trong Python

Từ khóa Yield của Python3 trả về một trình tạo cho người gọi và việc thực thi mã chỉ bắt đầu khi trình tạo được lặp lại

Trả về trong một hàm là phần cuối của quá trình thực thi hàm và một giá trị duy nhất được trả lại cho người gọi

Chủ Đề