30/09/2018, 22:23

Nhờ giải thích về python generator

Mình mới học python thôi đến phần generator có chút không hiểu mong mọi người chỉ giúp

def integers():
    """Infinite sequence of integers."""
    i = 1
    while True:
        yield i
        i = i + 1

def squares():
    for i in integers():
        yield i * i

def take(n, seq):
    """Returns first n values from the given sequence."""
    seq = iter(seq)
    result = []
    try:
        for i in range(n):
            result.append(seq.__next__())
    except StopIteration:
        pass
    return result

print(take(5, squares()))
# prints [1, 4, 9, 16, 25]

Mình không hiểu từ phần def take…
Thanks for reading

*grab popcorn* viết 00:23 ngày 01/10/2018

Bỏ code vô cặp ``` để code được format nha bạn!
http://daynhauhoc.com/t/markdown-trong-daynhauhoc-com/

AzuRI viết 00:24 ngày 01/10/2018

thanks bạn.lần sau mình sẽ chú ý hơn

Lương Quang Mạnh viết 00:36 ngày 01/10/2018
seq = iter(seq)
# trả về một iterable, ở đây cụ thể là squares - một dãy vô định số phần tử
result = []
# khởi tạo list kết quả trả về

# cái này không mình không chắc ý đồ của người viết là gì, nhưng không cần thiết
# phải cho vào mệnh đề try-except vì seq - squares có vô hạn phần tử
# nên không thể đạt đến phần tử cuối cùng, không thể gây ra lỗi StopIteration khi
# gọi next(iter) hoặc iter.__next()
for i in range(n):
    result.append(seq.__next__())
    # tương đương result.append(next(seq))
    # tìm phần tử tiếp theo của seq - squares, tức là cho nó chạy và yield
    # thêm lần nữa rồi append kết quả trả về vào result
    return result
    # trả về kết quả - một list chứa bình phương của n số nguyên từ 1 đến n
Bài liên quan
0