Python: 字符串中嵌入变量
问题:想创建一个内嵌变量的字符串,变量被它的值替换掉
解决方案:
1.Python并没有对在字符串中简单替换变量值提供直接的支持,但是通过字符串的format()方法来解决这个问题
>>>s.format(name='guoguo',n=30)
'guoguo has 30 messages.'
>>>S='{name} has {n} messages."
>>>S.format(name='guoguo' ,n=3)
'guoguo has 3 messages.'
>>>
2.如果要被替换的变量能在变量域中找到,那么结合使用format_map()
和vars()
>>>U='{name] has {n} messages.'
>>>name='tietie'
>>>n=9
>>>u.format_map(vars())
'tietie has 9 messages.'
>>>
3.vars() 还有一个有意思的特性就是它也适用于对象实例
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> class inx:
... def _init_(self, name,n):
... self.name=name
... self.n=n
...
>>>
>>>a1=inx(' meimei' ,5)
>>>
>>>U='{name} has {n} messages.'
>>>u.format_map(vars(a1))
'meimei has 5 messages.'
>>>
4.format 和format map() 的一个缺陷就是它们并不能很好的处理变量缺失的情况,
>>>s.format(name='guoguo')
Traceback (most recent call last):
Fi1e "<stdin>", line 1, in <module>
KeyError: 'n'
解决如下
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> class safe(dict):
... def _missing_(self,key):
... return'{'+ key +'}'
>>> del n
>>> n
Traceback (most recent call last):
File "<stdin>", line 1. in <module>
NameError: name 'n' is not defined
>>> name
'tietie'
>>>s.format_map(safe(vars())
'tietie has {n} messages.'
也有其他的解决办法,比如用模板字符串之类的,然而, format() 和format map()
相比较上面这些方案而已更加先进,因此应该被优先选择。使用format() 方法还有一个好处就是你可以获得对字符串格式化的所有支持(对齐,填充,数字格式化等待),而这些特性是使用像模板字符串之类的方案不可能获得的。