Python入门-字符串格式化

一、不推荐使用:%号

#正常按照位置传递参数
print('%s asked %s to do something' % ('egon', 'lili'))  #先后顺序不能乱

#字典传递参数
print('我的名字是 %(name)s, 我的年龄是 %(age)s.' % {'name': 'egon', 'age': 18})

#字典参数也可以单独提出来
kwargs={'name': 'egon', 'age': 18}
print('我的名字是 %(name)s, 我的年龄是 %(age)s.' % kwargs)

 

二、推荐使用:format

基础使用方法

#正常传递参数,位置对应即可
print('{} asked {} to do something'.format('egon', 'lili'))  
""" egon asked lili to do something"""

#索引传递参数
print('{0}{0}{1}{0}'.format('x','y'))

#关键字传递参数
print('我的名字是 {name}, 我的年龄是 {age}.'.format(age=18, name='egon'))

#字典传递参数
kwargs = {'name': 'egon', 'age': 18}
print('我的名字是 {name}, 我的年龄是 {age}.'.format(**kwargs)) # 使用**进行解包操作

类似的使用方法format_map

 msg3="你好,{name},今天日期是{date}".format_map({"name":"xiaobai","date":"2021-4-28"})

进化版使用方法:f”{}”

#传递变量名参数
print(f'{name} {age}')

#传递表达式参数 print(f'{3*3/2}') #数学表达式
#传递函数参数 def foo(name): print('hello ' , name) print(f'{foo("tom")}')
#调用对象的方法 print(f'{name.lower()}')
#在类中使用 class Person: def __init__(self,name, age): self.name = name self.age = age def __str__(self): return f"{self.name}" def __repr__(self): return f"{self.name,self.age}" obj = Person("tom", 22) print(obj)# 触发__str__ obj # 触发__repr__ #字符串过长时,回车分隔即可,每行都有一个f #注意单双引号的嵌套 name = 'baobao' age = 18 gender = 'male' hobbie1='play' hobbie2='music' hobbie3='read' info = [ #第一个元素 f'名字:{name},' f'年龄:{age},' f'性别:{gender}', # 第二个元素 f'第一个爱好:{hobbie1},' f'第二个爱好:{hobbie2},' f'第三个爱好:{hobbie3}' ]

三、模板字符串Template

from string import Template

name = "tom"
t = Template("hello $name")
res = t.substitute(name=name)
print(res)
"""
使用模板字符串Template的最佳的时机是:处理由用的输入内容。
模板字符串是最保险的选择,因为可以降低复杂性。
其他一些复杂的字符串格式化技巧的可能会给你的程序带来安全漏洞.
"""

四、格式化与填充

# *<10:左对齐,总共10个字符,不够的用*号填充
print('{0:*<10}'.format('开始执行')) # 开始执行******

# *>10:右对齐,总共10个字符,不够的用*号填充
print('{0:*>10}'.format('开始执行')) # ******开始执行

# *^10:居中显示,总共10个字符,不够的用*号填充
print('{0:*^10}'.format('开始执行')) # ***开始执行***

print('{salary:.3f}'.format(salary=1232132.12351))  #精确到小数点后3位,四舍五入,结果为:1232132.124
print('{0:b}'.format(123))  # 转成二进制,结果为:1111011
print('{0:o}'.format(9))  # 转成八进制,结果为:11
print('{0:x}'.format(15))  # 转成十六进制,结果为:f
print('{0:,}'.format(99812939393931))  # 千分位格式化,结果为:99,812,939,393,931