您的位置:首页 > 编程语言 > Python开发

字符串中插入变量

2017-03-23 15:05 10 查看
今天谈一个字符串中插入变量的话题,算是读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'

#好了,基本已经演示完了,更多的内容需要自己勤动手,实践出真知...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息