请教如何理解两个不同的generator函数返回的地址是一样的?
来源:7-3 掌握Python关键字yield与yield from

慕丝2042335
2021-12-19
def func_y():
print('func_y')
yield
def func_yr():
print('func_yr')
yield
return 2
print(func_y()) #<generator object func_y at 0x7faaaf51fdb0>
print(type(func_y)) #<class 'function'>
print(type(func_y())) # <class 'generator'>
print(id(func_y)) # 140371063748264
print(id(func_y())) # 140371062554032
print(func_yr()) # <generator object func_yr at 0x7faaaf51fdb0>
print(type(func_yr)) #<class 'function'>
print(type(func_yr())) # <class 'generator'>
print(id(func_yr)) #140371062448200
print(id(func_yr())) # 140371062554032
请教老师,为什么两个不一样的函数, func_y() 和 func_yr() 返回的内存地址一样,都是 generator object at 0x7faaaf51fdb0
呢?
另外,当调用这两个函数时,查看id, 发现它们在调用时的内存地址也一样:140371062554032
, 请教这个如何理解?翘首期盼,感谢解惑!
写回答
1回答
-
咚咚呛
2021-12-20
返回的地址不是函数的地址,而是生成器的地址,因为两个函数在print的时候已经因为yield变成了生成器了,而在这个线程内,两个函数都由同一个生成器进行调度,所以是地址是一样的。
00
相似问题