2025-09-10:仓库迁移
This commit is contained in:
43
2.字符串和文本/15.给字符串中的变量做插值处理.py
Normal file
43
2.字符串和文本/15.给字符串中的变量做插值处理.py
Normal file
@@ -0,0 +1,43 @@
|
||||
import sys
|
||||
|
||||
if __name__ == "__main__":
|
||||
# 一般来说,我们用{}和format函数对字符串进行插值
|
||||
s = "{name} has {n} messages"
|
||||
s1 = s.format(name="Sam", n=10)
|
||||
print(s1)
|
||||
|
||||
# 当然如果你想偷懒,也可以这样:
|
||||
name = "Sam"
|
||||
n = 10
|
||||
s2 = s.format_map(vars())
|
||||
print(s2)
|
||||
# 在上面这段代码中,vars函数会从堆栈里自动寻找变量名称的值
|
||||
# vars还能解析类实例:
|
||||
class INFO:
|
||||
def __init__(self, name, n):
|
||||
self.name = name
|
||||
self.n = n
|
||||
info = INFO(name, n)
|
||||
s3 = s.format_map(vars(info))
|
||||
print(s3)
|
||||
|
||||
# 爽吗?确实爽,但是有一个缺点,在填充值缺失的时候这玩意儿会报错
|
||||
try:
|
||||
s4 = s.format(name=name)
|
||||
except KeyError:
|
||||
print("少参数")
|
||||
|
||||
# 我们可以定义一个类的__missing__方法来防止出现这种情况
|
||||
class Safe_Sub(dict):
|
||||
def __missing__(self, key):
|
||||
return '{'+ key +'}'
|
||||
|
||||
del n
|
||||
print(s.format_map(Safe_Sub(vars())))
|
||||
|
||||
# 如果经常操作,那么可以把这个功能藏在函数里,同时从当前调用的堆栈里找到变量(我反正不建议这么干,不过得知道)
|
||||
def sub(text):
|
||||
# 不!要!在!代码里!碰!tmd!堆栈!这是手贱行为,可能导致各种bug,除非有必要的理由否则不要这么做
|
||||
return text.format_map(Safe_Sub(sys._getframe(1).f_locals))
|
||||
name = "Suka"
|
||||
print(sub(s))
|
Reference in New Issue
Block a user