chức năng zip python - hành vi kỳ lạ [trùng lặp]

Nov 10 2020

Có lời giải thích nào cho những gì đang xảy ra dưới đây không?

>>> foo = [10, 20]
>>> bar = [30, 40]
>>> foobar = zip(foo, bar)

>>> list(foobar)
[(10, 30), (20, 40)]

>>> tuple(foobar)
()

>>> list(foobar)
[]

>>> foobar
<zip object at 0x000001198D28E280>

Mặc dù foobarvẫn là một đối tượng zip, tại sao lại có những kết quả đầu ra này?

Trả lời

DragonBobZ Nov 10 2020 at 00:57

ziplà một trình tạo và trả về một trình lặp. Sau khi nó hoàn thành, đó là điều đó.

def mygen():
  count = 10
  while count:
    yield count
    count -= 1

gen_obj = mygen()

print(list(gen_obj))
print(list(gen_obj))
# [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
# []