请教如何理解两个不同的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变成了生成器了,而在这个线程内,两个函数都由同一个生成器进行调度,所以是地址是一样的。

0
0

学透协程/进程/线程 程序员必知必会技能

程序员都需要掌握的高性能开发技术

276 学习 · 55 问题

查看课程