python Format()函数的用法___实例详解(一)(全,例多)
(格式化替换,关键字替换,列表字典替换,类格式化,
魔法函数格式化,对齐及填充格式化,format对齐打印)
本篇目录内容:
📘 一、format() 函数的语法
- 语法:format(value, format_spec='')
- 格式化指定的值,并将其插入字符串的占位符内。
将值转换为由 format_spec 控制的“格式化”表示形式。
- format_spec的解释将取决于值参数的类型;
- 默认format_spec是一个空字符串,通常与调用 str(value) 具有相同的效果。
- 将 to 转换为在搜索值的方法时绕过实例字典的调用。
- 如果方法搜索到达对象并且format_spec为非空,或者如果format_spec或返回值不是字符串,则会引发 TypeError 异常
- 在 3.4 版更改: 如果format_spec不是空字符串,则引发 TypeError.object().__format__(format_spec)
📘 二、format() 函数基本用法
基本语法是通过 {} 和 : 来代替以前的 %
1、位置替换print('{0} {1}'.format('字符串1','字符串2'))格式,
{}调用时,字符串编号顺序从0开始
2、可通过列表索引格式化字符串,{0[1]}中,‘0’是必须的
3、可以使用大括号 {} 来转义大括号,{{}}
4、数字和关键字段可以混合使用来传递参数,
5、关键字参数必须位于位置参数之后。
6、省略字段名{}不能和数字形式的字段名同时使用
7、format 函数可以接受不限个参数,位置可以不按顺序。
8、占位符使用大括号 {} 定义。
9、返 回 值,返回一个格式化的字符串
📖(1)按照先后顺序位置替换
- 主要格式:print('{ } { }'.format('字符串1','字符串2'))
- foramt会把参数按位置顺序来填充到字符串中(按照顺序自动分配),第一个参数是0,然后1 ……
- 也可以不输入数字,则会按照顺序自动分配,而且一个参数可以多次插入
- 一个参数可以多次插入
- {{}}仅代表{},不占用字符串格式化位置顺序
位置替换,按照先后顺序对format内容进行匹配替换 | |
代 码 | #不指定位置,按默认顺序 print('{} {}'.format('Adversity','Awake')) |
运行结果 | Adversity Awake |
代 码 | #empty 占位符 mtext1 = "我的名字叫{},我已经{}岁了~".format("逆境清醒",100) print(mtext1) |
运行结果 | 我的名字叫逆境清醒,我已经100岁了~ |
代 码 | #不指定位置,按默认顺序 print('{} {} {} '.format('逆境清醒:','不能如愿而行,', '也须尽力而为。')) |
运行结果 | 逆境清醒:不能如愿而行,也须尽力而为。 |
代 码 | #不指定位置,按默认顺序,{{}}仅代表{},不占用字符串格式化位置顺序 print('{} {{}} {} {{}} {}'.format('逆境清醒:','不能如愿而行,', '也须尽力而为。')) |
运行结果 | 逆境清醒: {} 不能如愿而行, {} 也须尽力而为。 |
代 码 | # {} 和参数的个数必须匹配,否则会报错。 print('{}{}{}{}{}{}{}{}'.format('逆境清醒:','不能如愿而行,', '也须尽力而为。')) |
运行结果 | Traceback (most recent call last): Exited with error status 1 回溯(最近一次调用): 已退出,错误状态为 1 |
代 码 | #当{}号叠加时,例如{{{{}}}} print(' {{{{}}}} {} {{{{}}}} {}{}'.format('逆境清醒:','不能如愿而行,', '也须尽力而为。')) |
运行结果 | {{}} 逆境清醒: {{}} 不能如愿而行,也须尽力而为。 |
📖(2)按照索引进行匹配替换
- 主要格式:print('{0} {1}'.format('字符串1','字符串2'))
- 按索引编号来匹配替换{索引}的值
按照索引对format内容进行匹配替换 | |
代 码 | #按索引编号来匹配 mtext1 = "我的名字是{0},我已经{1}岁了~".format("逆境清醒",100) print(mtext1) |
运行结果 | 我的名字是逆境清醒,我已经100岁了~ |
代 码 | # 设置指定位置 print('{0} {1}'.format('逆境','清醒')) |
运行结果 | 逆境清醒 |
代 码 | # 设置指定位置 print('{1} {0}'.format('逆境','清醒')) |
运行结果 | 清醒逆境 |
代 码 | # 设置指定位置 print('{1} {0} {1}'.format('逆境','清醒')) |
运行结果 | 清醒逆境清醒 |
代 码 | # 设置指定位置 print('{1}{3}:{0},{2}!{3}!'.format('不能如愿而行', '逆境','也须尽力而为','清醒')) |
运行结果 | 逆境清醒:不能如愿而行,也须尽力而为!清醒! |
代 码 | print("{0}{2}{1}".format("菠萝","雪梨","苹果")) |
运行结果 | 菠萝苹果雪梨 |
代 码 | |
运行结果 | |
📖(3)按关键字索引进行匹配替换
- 主要格式:print('{关键字索引1} {关键字索引2}'.format(关键字索引1='关键字1',关键字索引2='关键字2'))
按照关键字索引对format内容进行匹配替换 | |
代 码 | print('ID:{id},Name:{name}'.format(id='No008',name='逆境清醒')) |
运行结果 | ID:No008,Name:逆境清醒 |
代 码 | print("博客名:{name}, 地址:{url}".format(name="逆境清醒", url="https://blog.csdn.net/weixin_69553582")) |
运行结果 | 博客名:逆境清醒, 地址:https://blog.csdn.net/weixin_69553582 |
#关键字可以随便放置 | |
代 码 | print("我今年{age}岁,座右铭{motto}".format(age="100",motto="要有勇气做真实的自己")) print("我今年{age}岁,座右铭{motto}".format(motto="要有勇气做真实的自己",age="100")) |
运行结果 | 我今年100岁,座右铭要有勇气做真实的自己 我今年100岁,座右铭要有勇气做真实的自己 |
代 码 | print("ID:{id},水果名:{Cname}".format(id="No01",Cname="菠萝")) |
运行结果 | ID:No01,水果名:菠萝 |
📖(4)通过列表索引格式化字符串
主要格式:
- 列表名=['列表值1','列表值2','列表值3'...]
- print('{List[列表索引1]},{List[列表索引2]}'.format(List = 列表名))
- 在format格式化时,可使用* 或者 ** 进行对list拆分。
通过列表索引格式化字符串 | |
代 码 | list1=['No008','逆境清醒'] print('ID:{List[0]},Name:{List[1]}'.format(List = list1)) |
运行结果 | ID:No008,Name:逆境清醒 |
代 码 | #注意正确使用索引值,否则会得出奇怪的答案 list1=['No008','逆境清醒'] print('ID:{List[1]},Name:{List[0]}'.format(List = list1)) |
运行结果 | ID:逆境清醒,Name:No008 |
代 码 | list1=['No008','逆境清醒'] print('ID:{0[0]},Name:{0[1]}'.format(list1)) |
运行结果 | ID:No008,Name:逆境清醒 |
代 码 | list1=['No008','逆境清醒'] print('ID:{0[1]},Name:{0[0]}'.format(list1)) |
运行结果 | ID:逆境清醒,Name:No008 |
代 码 | list1 = ['逆境清醒', 'https://blog.csdn.net/weixin_69553582'] print("博客名:{0[0]}, 地址:{0[1]}".format(list1)) # 0[1]中,‘0’是必须的 |
运行结果 | 博客名:逆境清醒, 地址:https://blog.csdn.net/weixin_69553582 |
代 码 | info1 = ("草莓", "红色") info2 = ('芒果', '黄色') print('水果名:{0[0]}, 颜色:{0[1]}'.format(info1, info2)) print('水果名:{1[0]}, 颜色:{1[1]}'.format(info1, info2)) |
运行结果 | 水果名:草莓, 颜色:红色 水果名:芒果, 颜色:黄色 |
代 码 | #注意正确使用索引值,否则会得出奇怪的答案 info1 = ("草莓", "红色") |
运行结果 | 水果名:红色, 颜色:草莓 水果名:黄色, 颜色:芒果 |
代 码 | #注意正确使用索引值,否则会得出奇怪的答案 info1 = ("草莓", "红色") |
运行结果 | 水果名:芒果, 颜色:红色 水果名:草莓, 颜色:黄色 |
代 码 | #在format格式化时,可使用* 或者 ** 进行对list拆分 foods = ['苹果', '雪梨', '草莓', '菠萝', '香蕉'] s = '小白兔喜欢吃 {2} and {0} and {4}'.format(*foods) print(s) |
运行结果 | 小白兔喜欢吃 草莓 and 苹果 and 香蕉 |
📖(5)通过字典设置格式化字符串
主要格式:
- 字典名1={'字典索引1':'字典索引1的值','字典索引2':'字典索引2的值',...}
- print('{字典索引},{字典索引值}'.format(字典名1))
- 在format格式化时,可使用 ** 进行对字典拆分
通过字典设置格式化字符串 | |
dict1={'id':'No008','name':'逆境清醒'} 错误使用方式: print('ID:{Dict[0]},Name:{Dict[1]}'.format(dict1)) 会出错:Traceback (most recent call last): | |
代 码 | dict1={'id':'No008','name':'逆境清醒'} print('ID:{0[id]},Name:{0[name]}'.format(dict1)) |
运行结果 | ID:No008,Name:逆境清醒 |
代 码 | #在format格式化时,可使用 ** 进行对字典拆分 print('ID:{id},Name:{name}'.format(**dict1)) |
运行结果 | ID:No008,Name:逆境清醒 |
代 码 | site = {"name": "逆境清醒", "url": "https://blog.csdn.net/weixin_69553582"} print("博客名:{name}, 地址:{url}".format(**site)) |
运行结果 | 博客名:逆境清醒, 地址:https://blog.csdn.net/weixin_69553582 |
代 码 | info1 = {'名字': '逆境清醒', '性别':'女'} info2 = {'名字': '蒲公英', '性别':'女'} print('名字:{0[名字]}, 性别:{0[性别]}; 名字:{1[名字]}, 性别:{1[性别]}'.format(info1, info2)) |
运行结果 | 名字:逆境清醒, 性别:女; 名字:蒲公英, 性别:女 |
同时使用元组和字典传参 | |
代 码 | name1=["紫悦","魔法与友谊"] name2={"Ponyname":"云宝","skill":"飞行"} print("我是{0},我的绝招是{1}".format(*name1,**name2)) print("我是{0},我的绝招是{skill}".format(*name1,**name2)) print("我是{Ponyname},我的绝招是{skill}".format(*name1,**name2)) print("我是{Ponyname},我的绝招是{1}".format(*name1,**name2)) |
运行结果 | 我是紫悦,我的绝招是魔法与友谊 我是紫悦,我的绝招是飞行 我是云宝,我的绝招是飞行 我是云宝,我的绝招是魔法与友谊 |
📖(6)通过类设置格式化字符串
主要格式:
- 类定义
class 类名字():
类内定义 = '类值'
....- print("{Value.类内定义}".format(Value = 类名字))
通过类设置格式化字符串 | |
代 码 | class value1(): id = 'No008' name = '逆境清醒' print("ID:{Value.id},Name{Value.name}".format(Value = value1)) |
运行结果 | ID:No008,Name逆境清醒 |
代 码 | class testValue(object): def __init__(self, value): self.value = value ab = testValue(8) print("ab=",ab) print("testValue(8)=",testValue(8)) print("ID:{Value}".format(Value = testValue)) print("ID:{Value.value}".format(Value = ab)) |
运行结果 | ab= <__main__.testValue object at 0x7f342b9ab670> testValue(8)= <__main__.testValue object at 0x7f342b9bcfa0> ID:<class '__main__.testValue'> ID:8 |
代 码 | class Names(): name1='陌生但有缘的朋友' name2='逆境清醒' print('你好! {names.name1},我是{names.name2}'.format(names=Names)) |
运行结果 | 你好! 陌生但有缘的朋友,我是逆境清醒 |
📖(7)通过魔法函数、参数设置格式化字符串
魔法函数__format__
- 触 发:使用字符串.format(对象)时候触发
- 参 数:一个self接收对象,一个参数接收format的{}中的格式,例如:>8
- 返回值:必须是字符串
- 作 用:设置对象可以作为format的参数,并且自定义对象格式化的规则
- 注 意:无
通过魔法参数设置格式化字符串 | |
代 码 | class magiccs: magic = magiccs() |
运行结果 | 这个参数类型是: <class 'str'> |
代 码 | class magiccs: magic = magiccs() |
运行结果 | 这个参数类型是: <class 'str'> |
代 码 | class Date: mDate = Date(2023, 3, 31) |
运行结果 | 日期格式(选项为 1 ): 2023 - 3 - 31 日期格式(选项为 2 ): 2023 : 3 : 31 日期格式(选项为 3 ): 2023 / 3 / 31 日期格式(选项为空, 则选择默认): 2023 - 3 - 31 日期格式(选项不存在, 则选择默认): 2023 - 3 - 31 |
代 码 | |
运行结果 |
📖(8)通过内嵌替换设置格式化字符串
通过内嵌替换设置格式化字符串 | |
代 码 | print('Hello {0:{1}>{2}} '.format('逆境清醒','☆',15)) |
运行结果 | Hello ☆☆☆☆☆☆☆☆☆☆☆逆境清醒 |
代 码 | |
运行结果 | |
📖(9)其他混搭使用
混搭使用
- 可以通过索引,参数名来混搭进行匹配。
- 注意,命名参数必须写道最后。负责会编译报错!
- 不可以索引和默认格式化混合使用。
- 支持对参数部分引用,可以通过索引对参数的部分进行取值
其他混搭使用 | |
代 码 | fh = [' @ ','。','!'] |
运行结果 | ID:No008 @ Name:逆境清醒。! |
代 码 | #命名参数必须写在最后。否则会编译报错! |
运行结果 | 努力不一定成功,但放弃一定会失败,说得对吗:Y |
代 码 | #命名参数必须写在最后。否则会编译报错! s1 = "{},{},说得对吗:{说得对吗}".format('努力不一定成功',说得对吗="Y", '但放弃一定会失败') |
运行结果 | SyntaxError: positional argument follows keyword argument Exited with error status 1 语法错误:位置参数跟在关键字参数后面 已退出,错误状态为 1 |
代 码 | #不可以索引和默认格式化混合使用 print(s) |
运行结果 | ValueError: cannot switch from automatic field numbering to manual field specification Exited with error status 1 值错误:无法从自动字段编号切换到手动字段规范 已退出,错误状态为 1 |
代 码 | #不可以索引和默认格式化混合使用 print(s) |
运行结果 | ValueError: cannot switch from automatic field numbering to manual field specification Exited with error status 1 值错误:无法从自动字段编号切换到手动字段规范 已退出,错误状态为 1 |
代 码 | #可以通过索引对参数的部分进行取值 s = "这是一个{s}, {s[0]} 是颜色".format(s="红苹果") print(s) |
运行结果 | 这是一个红苹果, 红 是颜色 |
📘 三、用对齐及填充的方式格式化
📖(1)左对齐及填充格式化字符串
- :< 左对齐填充
<是左对齐,后面带宽度,
: 号后面带填充的字符,只能是一个字符,不指定则默认是用空格填充。
-表示左对齐
%-30s: 左对齐,占位符30位
左对齐及填充格式化字符串 | |
代 码 | # 15表示占15个字符,-表示左对齐 print('%-15s'%'逆境清醒',end='@') |
运行结果 | 逆境清醒 @ |
代 码 | print('{:<10}'.format('逆境清醒'),end='@') |
运行结果 | 逆境清醒 @ |
代 码 | # <表示左对齐, ☆表示用☆号进行填充, 10表示共占10个字符 print('{:☆<10}'.format('逆境清醒')) |
运行结果 | 逆境清醒☆☆☆☆☆☆ |
代 码 | #左对齐,取30位,不够的话以空格补位 print("%-30s" % "Adversity Awake",end='@') |
运行结果 | Adversity Awake @ |
代 码 | #不设置,默认左对齐 print("{:20s} & {:20s}".format("珍惜每一次相识", "珍惜每一分温暖")) |
运行结果 | 珍惜每一次相识 & 珍惜每一分温暖 |
代 码 | # <表示左对齐,10表示共占10个字符 products=[["iphone",6888],["MacPro",14800],["coffee",32],["abc",2499],["Book",60],["Nike",699],["MacPro",45600],["coffee",432],["abc",244499],["Book",6230],["Nike",61299],["MacPro",14800],["coffee",32],["abc",2499],["Book",60],["Nike",699]] print("-"*10+"商品列表"+"-"*10) i=0 for product in products: print('{:<6}\t{:<10}\t{:<10}'.format(str(i), product[0], str(product[1]))) i = i+1 |
运行结果 | |
编外话:有时需要对齐输出,还可以使用print()+\t 来实现:
代 码 | print("学生号\t\t姓名\t\t\t\t\t科目\t\t分数") print("100000101\t阿凡达\t\t\t\t\t语文\t\t80") print("100000102\t卡梅隆卡梅隆\t\t\t语文\t\t85") print("100000103\t莫妮卡·贝鲁卡梅隆\t\t语文\t\t85") |
运行结果 | #用多个制表符,对齐完好 |
代 码 | print("%-10s\t %-30s\t %-10s\t %-10s"%("学生号","姓名","科目","分数")) print("%-10s\t %-32s\t %-10s\t %-12s"%("100000101","阿凡达","语文","80")) print("%-10s\t %-30s\t %-10s\t %-12s"%("100000102","卡梅隆卡梅隆","语文","82")) print("%-10s\t %-26s\t %-10s\t %-12s"%("100000103","莫妮卡·贝鲁卡梅隆","语文","85")) |
运行结果 | #对齐完好 |
更多print()函数资料详见:
Python中Print()函数的用法___实例详解(全,例多)https://blog.csdn.net/weixin_69553582/article/details/125403845
📖(2)右对齐及填充格式化字符串
:>右对齐
- >是右对齐,后面带宽度,
- : 号后面带填充的字符,只能是一个字符,不指定则默认是用空格填充。
- %30s: 右对齐,占位符30位
右对齐及填充格式化字符串 | |
代 码 | print('@''%15s'%'逆境清醒') |
运行结果 | @ 逆境清醒 |
代 码 | print('@''{:>10}'.format('逆境清醒')) |
运行结果 | @ 逆境清醒 |
代 码 | print('@','{:☆>10}'.format('逆境清醒')) |
运行结果 | @ ☆☆☆☆☆☆逆境清醒 |
代 码 | # 右对齐,取30位,不够的话以空格补位 print("@""%30s" % "Adversity Awake") |
运行结果 | @ Adversity Awake |
代 码 | print("{:<20s} & {:>20s}".format("珍惜每一次相识", "珍惜每一分温暖")) |
运行结果 | 珍惜每一次相识 & 珍惜每一分温暖 |
代 码 | print("{:>20s} & {:<20s}".format("珍惜每一次相识", "珍惜每一分温暖")) |
运行结果 | 珍惜每一次相识 & 珍惜每一分温暖 |
代 码 | print("{} is {:>10.2f}".format(1.8321, 1.8321)) |
运行结果 | 1.8321 is 1.83 |
📖(3)居中对齐及填充格式化字符串
:^ 居中对齐
- ^是居中对齐,后面带宽度,
- : 号后面带填充的字符,只能是一个字符,不指定则默认是用空格填充。
居中对齐及填充格式化字符串 | |
代 码 | print('@''{:^10}'.format('逆境清醒'),end='@') |
运行结果 | @ 逆境清醒 @ |
代 码 | print('@''{:☆^10}'.format('逆境清醒'),end='@') |
运行结果 | @☆☆☆逆境清醒☆☆☆@ |
代 码 | print("{:^20s} & {:^20s}".format("珍惜每一次相识", "珍惜每一分温暖")) |
运行结果 | 珍惜每一次相识 & 珍惜每一分温暖 |
代 码 | print("{:☆^30s}".format(" 逆境清醒 ") ) # 居中对齐 |
运行结果 | ☆☆☆☆☆☆☆☆☆☆☆☆逆境清醒☆☆☆☆☆☆☆☆☆☆☆☆ |
📖(4)调用函数对齐及填充格式化字符串
- ljust()函数:左侧对齐
- rjust()函数:右侧对齐
- center()函数:字符串居中对齐
- zfill()函数:右侧对齐, 左侧补0
- 当len(str1)>width时,输全部字符串
调用函数对齐及填充格式化字符串 | |
代 码 | # 字符串左侧对齐, 右侧补❄: str1 = "逆境清醒" print(str1.ljust(width, '❄')) |
运行结果 | 逆境清醒❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄ |
代 码 | # 字符串左侧对齐, 右侧补❄: print("{}".format(str1.ljust(width, '❄')) ) |
运行结果 | 逆境清醒❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄ |
代 码 | # 字符串右侧对齐, 左侧补❄: str1 = "逆境清醒" print(str1.rjust(width, '❄')) print("{}".format(str1.rjust(width, '❄')) ) |
运行结果 | ❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄逆境清醒 |
代 码 | # center字符串居中对齐, 两侧侧补❄ str1 = "逆境清醒" print(str1.center(width, '❄')) print("{}".format(str1.center(width, '❄')) ) |
运行结果 | ❄❄❄❄❄❄❄❄逆境清醒❄❄❄❄❄❄❄❄ |
代 码 | # 字符串右侧对齐, 左侧补0 str1 = "逆境清醒" |
运行结果 | 0000000000000000逆境清醒 |
📘 四、用format函数实现对齐打印
📖(1)打印左对齐图案
代码:
def show(n): numlast = "🌸"*(2*n-1) width = len(numlast) for i in range(1,2*n,2): print("{:<{}}".format("🌸"*i,width)) show(8)
输出结果:
📖(2)打印右对齐图案
代码:
def show(n): numlast = "0"*(2*n-1) width = len(numlast) width=20 for i in range(1,2*n,2): print("{:>{}}".format("0"*i,width)) show(8)
输出结果:
📖(3)打印居中对齐图案
代码:
def show2(n): numlast = "❄"*(2*n-1) width = len(numlast) for i in range(1,2*n,2): print("{:^{}}".format("❄"*i,width)) show2(8)
输出结果:
📘 五、其他内容待本系列篇(二)更新
稍后更新
《 python Format()函数的用法___实例详解(二)(全,例多)》
推荐阅读:
33 | python Format()函数的用法___实例详解(一)(全,例多)___各种格式化替换,format对齐打印 | |
32 | Background 全属性实例图解(10种全)(一) | |
31 | Element Plus 实例详解(一)___安装设置 | |
30 | | Vue3安装配置、开发环境搭建(组件安装卸载)(图文详细) |
29 | | |
28 | | |
27 | | |
26 | | |
25 | | |
24 | | |
23 | | |
22 | | |
21 | | |
20 | | |
19 | | |
18 | | |
17 | | |
16 | | |
15 | | |
14 | | |
13 | | |
12 | | |
11 | | 用代码写出浪漫__合集(python、matplotlib、Matlab、java绘制爱心、玫瑰花、前端特效玫瑰、爱心) |
10 | | |
9 | | |
8 | | |
7 | | 2023年3月TIOBE 指数头条:编程语言 Go 进入 TIOBE 指数前 10 名,多家权威机构____编程语言排行榜__薪酬状 |
6 | | |
5 | | |
4 | | |
3 | | |
2 | | |
1 | |