*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)