python 字符串格式化的示例
一、旧式的字符串格式化
%操作符
参考以下示例:
>>>name="Eric" >>>"Hello,%s."%name 'Hello,Eric.'
当有多个变量需要插入到字符串中时:
>>>name="Eric" >>>age=74 >>>"Hello,%s.Youare%s."%(name,age) 'Hello,Eric.Youare74.'
当需要替换的变量进一步增多时,使用%操作符格式化字符串会导致代码可读性变得很差:
>>>first_name="Eric" >>>last_name="Idle" >>>age=74 >>>profession="comedian" >>>affiliation="MontyPython" >>>"Hello,%s%s.Youare%s.Youarea%s.Youwereamemberof%s."%(first_name,last_name,age,profession,affiliation) 'Hello,EricIdle.Youare74.Youareacomedian.YouwereamemberofMontyPython.'
str.format()
str.format()是对%方式的改进,它使用常见的函数调用的语法,并且可以通过定义对象本身的__format__()方法控制字符串格式化的具体行为。
基本用法:
>>>name="Eric" >>>age=74 >>>"Hello,{}.Youare{}.".format(name,age) 'Hello,Eric.Youare74.'
str.format()相对于%操作符有着更强的灵活性。比如可以通过数字索引来关联替换到字符串中的变量:
>>>name="Eric" >>>age=74 >>>"Hello,{1}.Youare{0}.".format(age,name) 'Hello,Eric.Youare74.'
为了提高代码可读性,{}中也可以使用有具体含义的参数名:
>>>name="Eric" >>>age=74 >>>"Hello,{name}.Youare{age}".format(name=name,age=age) 'Hello,Eric.Youare74'
针对字典结构的数据:
>>>person={'name':'Eric','age':74} >>>"Hello,{name}.Youare{age}.".format(name=person['name'],age=person['age']) 'Hello,Eric.Youare74.'
或者更简洁的方式:
>>>person={'name':'Eric','age':74} >>>"Hello,{name}.Youare{age}.".format(**person) 'Hello,Eric.Youare74.'
问题在于当需要替换的变量很多时,str.format()方式依然会导致代码变得过于冗长:
>>>first_name="Eric" >>>last_name="Idle" >>>age=74 >>>profession="comedian" >>>affiliation="MontyPython" >>>"Hello,{first_name}{last_name}.Youare{age}.\ Youarea{profession}.Youwereamemberof{affiliation}."\ .format(first_name=first_name,last_name=last_name,age=age,\ profession=profession,affiliation=affiliation) 'Hello,EricIdle.Youare74.Youareacomedian.YouwereamemberofMontyPython.'
二、f-string
基本用法
>>>name="Eric" >>>age=74 >>>f"Hello,{name}.Youare{age}." 'Hello,Eric.Youare74.'
嵌入表达式
>>>f"{2*37}" '74' >>>defto_lowercase(input): ...returninput.lower() >>>name="EricIdle" >>>f"{to_lowercase(name)}isfunny" 'ericidleisfunny' >>>f"{name.lower()}isfunny" 'ericidleisfunny'
f-string中还可以直接嵌入某个对象实例,只要其内部实现了__str__或者__repr__方法:
classComedian: def__init__(self,first_name,last_name,age): self.first_name=first_name self.last_name=last_name self.age=age def__str__(self): returnf"{self.first_name}{self.last_name}is{self.age}" new_comedian=Comedian("Eric","Idle",74) print(f"{new_comedian}") #EricIdleis74
多行f-string
>>>name="Eric" >>>profession="comedian" >>>affiliation="MontyPython" >>>message=( ...f"Hi{name}." ...f"Youarea{profession}." ...f"Youwerein{affiliation}." ...) >>>message 'HiEric.Youareacomedian.YouwereinMontyPython.'
参考资料
Python3'sf-Strings:AnImprovedStringFormattingSyntax(Guide)
以上就是python字符串格式化的示例的详细内容,更多关于python字符串格式化的资料请关注毛票票其它相关文章!