Làm thế nào để nhận một giá trị tại một thời điểm từ một hàm trình tạo trong Python?


113

Câu hỏi rất cơ bản - làm thế nào để nhận một giá trị từ trình tạo trong Python?

Cho đến nay tôi thấy tôi có thể có được một cái bằng cách viết gen.next(). Tôi chỉ muốn chắc chắn rằng đây là cách đúng đắn?

Câu trả lời:



66

Trong Python <= 2.5, hãy sử dụng gen.next(). Điều này sẽ hoạt động cho tất cả các phiên bản Python 2.x, nhưng không phải Python 3.x

Trong Python> = 2.6, sử dụng next(gen). Đây là một chức năng được tích hợp sẵn và rõ ràng hơn. Nó cũng sẽ hoạt động trong Python 3.

Cả hai đều gọi một hàm được đặt tên đặc biệt next(), có thể được ghi đè bằng cách phân lớp con. Tuy nhiên, trong Python 3, hàm này đã được đổi tên thành __next__(), để phù hợp với các hàm đặc biệt khác.


16

Sử dụng (cho python 3)

next(generator)

Đây là một ví dụ

def fun(x):
    n = 0
    while n < x:
        yield n
        n += 1
z = fun(10)
next(z)
next(z)

nên in

0
1


2

Để nhận giá trị được liên kết với đối tượng trình tạo trong python 3 trở lên, hãy sử dụng next(<your generator object>). các lệnh gọi tiếp theo tới next () tạo ra các giá trị đối tượng liên tiếp trong hàng đợi.


1

Trong python 3, bạn không có gen.next(), nhưng bạn vẫn có thể sử dụng next(gen). Một chút kỳ lạ nếu bạn hỏi tôi nhưng đó là cách nó.


1
Nó không phải là lạ. Python 3 được cho là sẽ phá vỡ mọi thứ và chỉ cho phép mã rõ ràng hơn tốt hơn. Không có khả năng tương thích ngược là điểm của một số thay đổi đột phá.
Tatarize
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.