如何推迟推迟对f弦的评估?

如何推迟推迟对f弦的评估?,第1张

如何推迟/推迟对f弦的评估?

这是完整的“理想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


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5674535.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存