这是完整的“理想2”。
它不是f字符串,它甚至不使用f字符串,但可以按要求进行 *** 作。语法完全符合规定。没有使用安全性,因为我们没有使用
eval()。
它使用了一个小类并实现了
__str__由print自动调用的类。为了逃避该类的有限范围,我们使用
inspect模块向上跳一帧,并查看调用者可以访问的变量。
import inspectclass magic_fstring_function: def __init__(self, payload): self.payload = payload def __str__(self): vars = inspect.currentframe().f_back.f_globals.copy() vars.update(inspect.currentframe().f_back.f_locals) return self.payload.format(**vars)template = "The current name is {name}"template_a = magic_fstring_function(template)# use it inside a function to demonstrate it gets the scoping rightdef new_scope(): names = ["foo", "bar"] for name in names: print(template_a)new_scope()# The current name is foo# The current name is bar
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)