Python生成器对象能否查询其原始生成表达式或语义等价内容?
Python生成器能否查询原始生成表达式?
不行——不管是生成器未使用、正在迭代还是已经耗尽,你都没法直接从生成器对象里拿到它的原始生成表达式或者语义等价的可读内容。
原因
Python生成器在创建时,会把生成表达式编译成字节码来执行迭代逻辑,但不会保留原始的表达式字符串。你可以用inspect模块查看生成器的字节码或关联的源码片段,但这些都是底层编译后的内容,不是直观的原始表达式。比如尝试inspect.getsource(myra)大概率会报错,因为生成器表达式是匿名构造的,没有绑定能直接提取表达式的源码信息。
要是想实现类似需求怎么办?
只能手动封装生成器,自己保存表达式信息。比如写个简单的包装类:
class TrackedGenerator: def __init__(self, expr, gen): self.expression = expr self.gen = gen def __iter__(self): return self def __next__(self): return next(self.gen) # 创建带追踪的生成器 myra = TrackedGenerator('x + 100 for x in range(5)', (x + 100 for x in range(5))) # 正常遍历 for num in myra: print(num) # 定义你要的查询函数 def print_the_foundation(gen): if isinstance(gen, TrackedGenerator): return gen.expression return "Not a tracked generator" print(print_the_foundation(myra)) # 输出: x + 100 for x in range(5)
本质就是手动把生成表达式的字符串和生成器绑定在一起,因为生成器本身不会帮你存这个信息。
内容的提问来源于stack exchange,提问作者bukwyrm
相关产品推荐
相关产品推荐

