简体   繁体   中英

Get functions from python generator

I'm trying to learn more about generator functions in Python. To my knowledge, generator functions don't fully return until there are no more yield calls, so a stack frame exists in the generator returned by the function.

Stack frames should have references to a callable function, so my question is: how can I get that callable function from the generator?

When running the code below, I have a generator function, test() .

def test():
    for i in range(10):
        yield i

generator = test()

In this example, is there any way to get the callable function test() from generator ?

After looking at this answer , it seems like CPython keeps track of some of these like generator.frame and generator.code , however, I can't seem to convert those objects into functions.

I need the callable function. Something like this:

func = generator.something_special
new_generator = func()

You can use the __name__ attribute to get the name of the original function then access it inside locals provided it's still in scope.

def test():
    for i in range(10):
        yield i


generator = test()
print(list(generator)) 
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]


func_name = generator.__name__ 
new_generator = locals()[func_name]()
print(func_name, list(new_generator)) 
# test [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM