标签:好用 栈帧 字符 sub orm 字典 找不到 ping string
方法一:也是 比较好用的,功能教齐全
s="{name} is {sex}" print(s.format(name="zzy",sex="girl")) # zzy is girl
如果要被替换的变量能在变量域中找到, 那么你可以结合使用 format_map() 和 vars()
vars()找到所有局部变量
name="zxc" sex="boy" print(s.format_map(vars())) # zxc is boy
vars() 还有一个有意思的特性就是它也适用于对象实例。
class Info: def __init__(self,name,sex): self.name=name self.sex=sex a=Info("zzz","beautiful") print(s.format_map(vars(a))) # zzz is beautiful
缺陷:format 和 format_map() 的一个缺陷就是它们并不能很好的处理变量缺失的情况
s = "{name} is {sex}" print(s.format(name=‘Guido‘)) 报错: """ Traceback (most recent call last): File "/home/zzy/PycharmProjects/MyTest/littleTest.py", line 301, in <module> print(s.format(name=‘Guido‘)) KeyError: ‘sex‘ """
解决:
我们把参数sex 手动清除
s = "{name} is {sex}" name = "zxc" class safesub(dict): """防止key找不到""" def __missing__(self, key): return ‘{‘ + key + ‘}‘ print(s.format_map(safesub(vars()))) # zxc is {sex} # 映射或者字典类中鲜为人知的 __missing__() 方法可以让你定义如何处理缺失的值。 在 SafeSub 类中,这个方法被定义为对缺失的值返回一个占位符。 你可以发现缺失的值会出现在结果字符串中(在调试的时候可能很有用),而不是产生一个 KeyError 异常
如果你发现自己在代码中频繁的执行这些步骤,你可以将变量替换步骤用一个工具函数封装起来。就像下面这样:
import sys def sub(text): return text.format_map(safesub(sys._getframe(1).f_locals)) print(sys._getframe().f_locals) print(sub(s)) # zxc is {sex} #注释:1:,sub() 函数使用 sys._getframe(1) 返回调用者的栈帧。可以从中访问属性 f_locals 来获得局部变量
方法二: 实现功能的还有一种方法,就是模板字符串,但是教之format_map var 就low一些了,,也是没法处理变量缺失问题使用 format() 方法还有一个好处就是你可以获得对字符串格式化的所有支持(对齐,填充,数字格式化等待)
import string n=24 s = string.Template(‘$name has $n messages.‘) print(s.substitute(vars())) # zxc has 24 messages.
标签:好用 栈帧 字符 sub orm 字典 找不到 ping string
原文地址:https://www.cnblogs.com/zzy-9318/p/10451934.html