*Memo:
- My post explains a generator (1).
- My post explains a generator (2).
- My post explains a generator (3).
gi_yieldfrom can return an iterator if the generator is resumed at yield from otherwise it returns None as shown below:
def gen(): yield from [0, 1] yield 2 yield from [3, 4] yield 5 v = gen() while True: try: print(v.gi_yieldfrom, next(v.gi_yieldfrom)) except: print(v.gi_yieldfrom, next(v)) # None 0 # <list_iterator object at 0x000001C66EBFE410> 1 # <list_iterator object at 0x000001C66EBFE410> 2 # None 3 # <list_iterator object at 0x000001C66EBFE410> 4 # <list_iterator object at 0x000001C66EBFE410> 5 gi_running can check if the generator is currently running as shown below:
<yield>:
def gen(): print(v.gi_running, 'gen') # True gen yield 0 print(v.gi_running, 'gen') # True gen yield 1 print(v.gi_running, 'gen') # True gen yield 2 print(v.gi_running, 'gen') # True gen v = gen() print(v.gi_running) # False print(next(v)) # 0 print(v.gi_running) # False print(next(v)) # 1 print(v.gi_running) # False print(next(v)) # 2 print(v.gi_running) # False print(next(v)) # StopIteration: <yield from>:
def gen(): print(v.gi_running, 'gen') # True gen yield from [0, 1] print(v.gi_running, 'gen') # True gen yield from [2, 3] print(v.gi_running, 'gen') # True gen yield from [4, 5] print(v.gi_running, 'gen') # True gen v = gen() print(v.gi_running) # False print(next(v)) # 0 print(v.gi_running) # False print(next(v)) # 1 print(v.gi_running) # False print(next(v)) # 2 print(v.gi_running) # False print(next(v)) # 3 print(v.gi_running) # False print(next(v)) # 4 print(v.gi_running) # False print(next(v)) # 5 print(v.gi_running) # False print(next(v)) # StopIteration: gi_suspended can check if the generator is currently suspended(paused) as shown below:
<yield>:
def gen(): print(v.gi_suspended, 'gen') # False gen yield 0 print(v.gi_suspended, 'gen') # False gen yield 1 print(v.gi_suspended, 'gen') # False gen yield 2 print(v.gi_suspended, 'gen') # False gen v = gen() print(v.gi_suspended) # False print(next(v)) # 0 print(v.gi_suspended) # True print(next(v)) # 1 print(v.gi_suspended) # True print(next(v)) # 2 print(v.gi_suspended) # True print(next(v)) # StopIteration: <yield from>:
def gen(): print(v.gi_suspended, 'gen') # False gen yield from [0, 1] print(v.gi_suspended, 'gen') # False gen yield from [2, 3] print(v.gi_suspended, 'gen') # False gen yield from [4, 5] print(v.gi_suspended, 'gen') # False gen v = gen() print(v.gi_suspended) # False print(next(v)) # 0 print(v.gi_suspended) # True print(next(v)) # 1 print(v.gi_suspended) # True print(next(v)) # 2 print(v.gi_suspended) # True print(next(v)) # 3 print(v.gi_suspended) # True print(next(v)) # 4 print(v.gi_suspended) # True print(next(v)) # 5 print(v.gi_suspended) # True print(next(v)) # StopIteration:
Top comments (0)