【python cookbook】【字符串与文本】15.给字符串中的变量名做插值处理
问题:想创建一个字符串,其中嵌入的变量名称会以变量的字符串值形式替换掉
解决方法: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 cookbook】【字符串与文本】15.给字符串中的变量名做插值处理的更多相关文章
- PHP 自定义字符串中的变量名解析
PHP 自定义字符串中的变量名解析 这样一个需求:页面的 title 可以在后台自定义,自定义内容中可能包含变量,变量用 {$var} 表示, 其中 $var 为变量名 将 title 字段存入数 ...
- 【python cookbook】【字符串与文本】14.字符串连接及合并
问题:将许多小字符串合并成一个大的字符串 解决方案: 1.针对少数量的字符串:+ 2.针对大量的字符串对象的连接,更高效的方法:join() 3.更加复杂的字符串:format() >>& ...
- 《Python Cookbook v3.0.0》Chapter2 字符串、文本
感谢: https://github.com/yidao620c/python3-cookbook 如有侵权,请联系我整改. 本文章节会严格按照原书(以便和原书对照,章节标题可能会略有修改),内容会有 ...
- shell的字符串和数字的转化(数字自动做字符串处理,变量名做字符串输出用单引号)
shell里面怎么样把字符串转换为数字? 例如:a="024" 1,用${{a}} 2,用let达到(()) 运算效果. let num=0123; echo $num; 83 3 ...
- 【python cookbook】【数据结构与算法】19.同时对数据做转换和换算
问题:我们需要调用一个换算函数(例如sum().min().max()),但是首先需对数据做转换或者筛选处理 解决方案:非常优雅的方法---在函数参数中使用生成器表达式 例如: # 计算平方和 num ...
- python趣味——与MS系列编译器一样强大的Unicode变量名支持
中文变量名,中文函数名,中文类名等,可惜Python2不支持,但在Python3时代,这些都可以完美支持了. def 中文函数(): return 1
- python中关于变量名失效的案例
案例一:传参动态导入模块. selectModule = input("please input your module name") app_name = input(" ...
- [转]python3字符串与文本处理
转自:python3字符串与文本处理 阅读目录 1.针对任意多的分隔符拆分字符串 2.在字符串的开头或结尾处做文本匹配 3.利用shell通配符做字符串匹配 4.文本模式的匹配和查找 5.查找和替换文 ...
- python3字符串与文本处理
每个程序都回涉及到文本处理,如拆分字符串.搜索.替换.词法分析等.许多任务都可以通过内建的字符串方法来轻松解决,但更复杂的操作就需要正则表达式来解决. 1.针对任意多的分隔符拆分字符串 In [1]: ...
随机推荐
- 微信支付开发(2) 静态链接Native支付
关键字:微信支付 微信支付v3 native支付 统一支付 Native支付 prepay_id 作者:方倍工作室原文: http://www.cnblogs.com/txw1958/p/wxpayv ...
- Linux系统 ssh图形界面远程
远程Linux系统有图形界面 1.下载xming 并安装启动 2.通过putty登陆虚拟机 3.输入gnome-session
- IDE硬盘 SCSI硬盘 SATA硬盘
IDE一般是有扁平电缆连接的,一个扁平电缆可以连接2个IDE硬盘,而一个计算机一般提供2个扁平电缆,所以一般允许4块IDE硬盘.IDE经过多年的发展,成熟,廉价,稳定.一般老式的电脑中装的都是这种硬盘 ...
- myeclipse WIN7下设置字体列表中无Courier New
到"C:\Windows\Fonts"下找到对应的字体,单击,选择上面的显示 然后就可以在eclicpse字体设置里面看到Courier New项了: Eclipse字体设置方法: ...
- tableview head
http://stackoverflow.com/questions/18880341/why-is-there-extra-padding-at-the-top-of-my-uitableview- ...
- arping 通知网关刷新IP
arping -c 2 -I em1 -s 192.168.110.12 192.168.110.1
- Linux-QT 开发环境搭建以及编译镜像
搭建Linux-QT 开发环境,需要先搭建Android 的编译环境,然后在Android 编译环境的基础上,再搭建Linux-QT 编译环境. 第一:编译器. 第二:设置环境变量.环境变量设置后,编 ...
- javascript中argument1 === void 0的意思
今天看代码时看到 if (argument1 === void 0 || typeof argument1 === 'object') { 啥意思? 概述 void 运算符会对它的操作数表达式进行求值 ...
- ios学习笔记01
## HUD - 其他说法:指示器.遮盖.蒙板 - 半透明HUD的做法 - 背景色设置为半透明颜色 ## 定时任务 - 方法1:performSelector ```objc // 1.5s后自动调用 ...
- EBS安装提示libXtst.so.6: cannot open shared object file
$ ./rapidwiz Rapid Install Wizard is validating your file system...... CMDDIR=/app/Stage122/startCD/ ...