【python cookbook】【字符串与文本】15.给字符串中的变量名做插值处理
Python 处理 字符串 文本 15 插值 Cookbook 变量名
2023-09-14 09:01:12 时间
问题:想创建一个字符串,其中嵌入的变量名称会以变量的字符串值形式替换掉
解决方法:str.format()、str.format_map()
>>> s = '{name} has {n} messages.' >>> s.format(name='Guido',n=37) 'Guido has 37 messages.' >>> name='Guido' >>> n=37 >>> s.format_map(vars()) 'Guido has 37 messages.' >>> #以上是另一种方式,即如果要被替换的值确实能在变量中找到,则可以将format_map()和vars()联合起来使用 >>>
vars()的一个微妙特性是它也能作用于类实例上:
>>> s = '{name} has {n} messages.' >>> class Info: def __init__(self,name,n): self.name=name self.n=n >>> a=Info('Guido',37) >>> s.format_map(vars(a)) 'Guido has 37 messages.' >>>
而format()与format_map()的一个缺点则是没法优雅的处理缺少某个值的情况。
>>> s.format(name='Guido') Traceback (most recent call last): File "<pyshell#76>", line 1, in <module> s.format(name='Guido') KeyError: 'n' >>>
避免这种情况的一种方法是单独定义一个带有__missing__()方法的字典类,例如:
>>> class safesub(dict): def __missing__(self, key): return '{%s}' % key >>> s = '{name} has {n} messages.' >>> del n #确保n是非定义的 >>> print(s.format_map(safesub(vars()))) Guido has {n} messages. >>>
若在代码中常常需要执行这些操作,则可以将替换变量的过程隐藏在一个小型的功能函数内,这里成为一种‘frame hack’的技巧-即需要和函数的栈帧打交道,sys._getframe这个特殊的函数可以让我们获得调用函数的栈信息。
class safesub(dict): def __missing__(self, key): return '{%s}' % key s = '{name} has {n} messages.' # (c) Safe substitution + frame hack n = 37 import sys def sub(text): return text.format_map(safesub(sys._getframe(1).f_locals)) print(sub('Hello {name}')) print(sub('{name} has {n} messages')) print(sub('Your favorite color is {color}'))
>>> ================================ RESTART ================================ >>> Hello {name} {name} has 37 messages Your favorite color is {color} >>>
相关文章
- Python 编程 | 连载 21 -序列化与加密模块
- python字符串转化列表_Python列表到字符串的转换[通俗易懂]
- python常用面试题_Python+Selenium 常见面试题整理[通俗易懂]
- python整除和取余写法_Python的整除和取余[通俗易懂]
- Python入门系列(十)一篇学会python文件处理
- python处理通达信 5分钟数据 .lc5文件处理,生成csv文件,期货回测
- python语言一般用于什么_PYthon
- 【说站】Python脚本如何指定文件
- 【说站】python scrapy处理翻页的方法
- Python 多进程处理数据
- Python 反转字符串_python输出字符串
- opencv(4.5.3)-python(十二)--图像阈值处理
- Python基础(二十五):异常处理基础知识
- python连接mysql查询数据示例详解编程语言
- python 时间处理详解编程语言
- 30个深度学习库:按Python和C++等10种语言分类
- Python与Linux:开启互联网信息技术时代(python和linux)
- Python与MySQL实现数据分析的完美组合(mysql中python)
- python之import机制详解
- Node.js与PHP、Python的字符处理性能对比