Python: 字符串中嵌入变量

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

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

解决方案:

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

相关文章

利用python同步windows和linux文件

写python脚本的初衷,每次在windows编辑完文件后,想同步到linux上去,只能够登录服务器,...

爬虫基本原理

爬虫基本原理 一、爬虫是什么? 百度百科和维基百科对网络爬虫的定义:简单来说爬虫就是抓取目标网站内容的工具,一般是根据定义的行...

Django 函数和方法的区别

函数和方法的区别 1、函数要手动传self,方法不用传 2、如果是一个函数,用类名去调用,如果是一个方法...

Django 知识补漏单例模式

单例模式:(说白了就是)创建一个类的实例。在 Python 中,我们可以用多种方法来实现单例模式&#x...

Django基础知识MTV

Django简介 Django是使用Python编写的一个开源Web框架。可以用它来快速搭建一个高性能的网站。 Django也是一个MVC框架。但是在Dj...

Python mysql 索引原理与慢查询优化

一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,...

发表评论

访客

看不清,换一张

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