字符串中插入变量

来源:互联网 发布:vs2015可以写c语言吗 编辑:程序博客网 时间:2024/06/06 05:58

今天谈一个字符串中插入变量的话题,算是读python cookbook理解之后的总结吧

@python>>>s='{} has RMB {}'>>>s.format('kss',100)'kss has RMB 100'   #以上是普通的替换,经常也可以以'%s has RMB %d'%(name,num)的形式出现,但是format性能更佳,不多说.#看一下插入变量>>>s='{name} has RMB {n}'>>>s.format('kss',100)Traceback (most recent call last):  File "<stdin>", line 1, in <module>KeyError: 'name'#报错了,注意,如果字符串中是以变量名的形式插入,那么填坑的时候需要传递键值对>>>s.format(name='kss',n=100)'kss has RMB 100'#-------------害羞的分隔线---------------#以上是普通的用法,简单方便,现在来看一下深入一点的>>>name='kss'>>>n=50>>>s='{name} has RMB {n}'>>>s.format_map(vars())'kss has RMB 50'#format_map和format功能一样,获取的是dict类型的对象来给字符串填坑而不是format的keyword,vars()获取上下文环境中定义的变量,返回键值对,也就是dict#vars()还有一个特例就是还可以直接获取类对象,比如:>>>class Info:    def __init__(self,name,n):        self.name=name        self.n=n>>>a=Info('kss','30')>>>s.format_map(vars(a))'kss has RMB 30'#---------又是一条害羞的分隔线---------------#format,format_map也有缺陷,缺陷是当提供的参数不足是就会报错,比如:>>>s='{name} has RMB {n}'>>>s.format(name='kss')Traceback (most recent call last):  File "<stdin>", line 1, in <module>KeyError: 'n'#为了让系统性能提高一些,我们可以这样做避免上面的得异常>>>class safesub(dict):    def __missing__(self,key):        return '{'+key+'}'>>>s='{name} has RMB {n}'>>>name='kss'>>>s.format_map(safesub(vars()))'kss has RMB {n}'#看,这样子就不会报错了,而是把变量原样输出#--------------这是一条霸气的分隔线---------------------#如果字符串中插入变量,替换变量这种操作在你的程序中经常用到,你可以把这种操作固定成一种函数来简化,方便使用,比如:>>>import sys>>>def sub(text):    return text.format_map(safesub(sys._getframe(1).f_locals))#然后你就可以为所欲为了>>>name='kss'>>>n=0>>>s='{name} has RMB {n}'>>>sub(s)'kss has RMB 0'>>>print(sub('hello, my name is {name}'))'hello, my name is kss'#好了,基本已经演示完了,更多的内容需要自己勤动手,实践出真知...
0 0
原创粉丝点击