Python: 字符串中嵌入变量

枫铃3年前 (2021-09-30)Python278

问题:想创建一个内嵌变量的字符串,变量被它的值替换掉

解决方案:

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() 方法还有一个好处就是你可以获得对字符串格式化的所有支持(对齐,填充,数字格式化等待),而这些特性是使用像模板字符串之类的方案不可能获得的。

相关文章

python3中map()函数用法

1.map语法: map() 函数语法:map(function, iterable, …) 简单来说,map()...

nginx,tomcat,apache三者分别用来做什么,有何区别

nginx,tomcat,apache三者分别用来做什么,有何区别

1. Nginx和tomcat的区别 nginx常用做静态内容服务和代理服务器,直接外来请求转发给后面的应用服务器(tomcat...

Python基础教程:函数名本质

函数名的本质 函数名实...

Python 实现 动态规划 /斐波那契数列

Python 实现 动态规划 /斐波那契数列

1、斐波那契数列 斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那...

Python3将xml文件解析为Python对象

Python3将xml文件解析为Python对象

一、说明 从最开始写j...

Python基础教程:变量和注释

1、什么叫变量 Python语言中,对象的名字, 称之为 变量名 , 也通常简称 变量。 所以Python中的变量࿰...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。