python Format()函数的用法
python Format()函数的用法___实例详解(一)(全,例多)
(格式化替换,关键字替换,列表字典替换,类格式化,
魔法函数格式化,对齐及填充格式化,format对齐打印)
本篇目录内容:
📘 一、format() 函数的语法
📘 二、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):
File "script.py", line 1, in
print('{}{}{}{}{}{}{}{}'.format('逆境清醒:','不能如愿而行,', '也须尽力而为。'))
IndexError: Replacement index 3 out of range for positional args tuple
Exited with error status 1
回溯(最近一次调用):
文件 “script.py”,第 1 行,在
print('{}{}{}{}{}'.format('逆境清醒:','不能如愿而行,', '也须尽力而为。'))
索引错误:替换索引 3 超出位置参数元组的范围
已退出,错误状态为 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 = ("草莓", "红色")
info2 = ('芒果', '黄色')
print('水果名:{0[1]}, 颜色:{0[0]}'.format(info1, info2))
print('水果名:{1[1]}, 颜色:{1[0]}'.format(info1, info2))
运行结果 水果名:红色, 颜色:草莓 水果名:黄色, 颜色:芒果
代 码 #注意正确使用索引值,否则会得出奇怪的答案
info1 = ("草莓", "红色")
info2 = ('芒果', '黄色')
print('水果名:{1[0]}, 颜色:{0[1]}'.format(info1, info2))
print('水果名:{0[0]}, 颜色:{1[1]}'.format(info1, info2))
运行结果 水果名:芒果, 颜色:红色 水果名:草莓, 颜色:黄色
代 码 #在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格式化时,可使用 ** 进行对字典拆分
dict1={'id':'No008','name':'逆境清醒'}
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= testValue(8)=
ID:
ID:8
代 码
class Names(): name1='陌生但有缘的朋友'
name2='逆境清醒'
print('你好! {names.name1},我是{names.name2}'.format(names=Names))
运行结果
你好! 陌生但有缘的朋友,我是逆境清醒 📖(7)通过魔法函数、参数设置格式化字符串
魔法函数__format__
- 触 发:使用字符串.format(对象)时候触发
- 参 数:一个self接收对象,一个参数接收format的{}中的格式,例如:>8
- 返回值:必须是字符串
- 作 用:设置对象可以作为format的参数,并且自定义对象格式化的规则
- 注 意:无
通过魔法参数设置格式化字符串
代 码 class magiccs:
def __format__(self, mstr):
print("这个参数类型是:",type(mstr))
print(f"你使用format()函数,叫醒了我--》(逆境清醒留言内容:{mstr})")
return "@"
magic = magiccs()
format(magic)
运行结果
这个参数类型是:
你使用format()函数,叫醒了我--》(逆境清醒留言内容:)
代 码 class magiccs:
def __format__(self, mstr):
print("这个参数类型是:",type(mstr))
print(f"你使用format()函数,叫醒了我--》(逆境清醒留言内容:{mstr})")
return "@"
magic = magiccs()
format(magic, "2023年,但行前路,不负韶华!")
运行结果
这个参数类型是:
你使用format()函数,叫醒了我--》(逆境清醒留言内容:2023年,但行前路,不负韶华!)
代 码
class Date:
__format_dic = {
"1": "{obj.year} - {obj.mon} - {obj.day}",
"2": "{obj.year} : {obj.mon} : {obj.day}",
"3": "{obj.year} / {obj.mon} / {obj.day}"
}
def __init__(self, Year, Mon, Day):
self.year = Year
self.mon = Mon
self.day = Day
def __format__(self, s_str):
if not s_str or not s_str in self.__format_dic:
f = self.__format_dic["1"]
else:
f = self.__format_dic[ s_str]
return f.format(obj=self)
mDate = Date(2023, 3, 31)
print("日期格式(选项为 1 ):",format(mDate, "1"))
print("日期格式(选项为 2 ):",format(mDate, "2"))
print("日期格式(选项为 3 ):",format(mDate, "3"))
print("日期格式(选项为空, 则选择默认):",format(mDate, ))
print("日期格式(选项不存在, 则选择默认):",format(mDate, "3iop"))
运行结果
日期格式(选项为 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 = [' @ ','。','!']
keycs = {'id': 'No008','name': '逆境清醒'}
print('ID:{id} {}Name:{name}{}{}'.format(*fh, **keycs))
运行结果
ID:No008 @ Name:逆境清醒。! 代 码
#命名参数必须写在最后。否则会编译报错!
s = "{},{},说得对吗:{说得对吗}".format('努力不一定成功', '但放弃一定会失败',说得对吗="Y")
print(s)
运行结果
努力不一定成功,但放弃一定会失败,说得对吗:Y
代 码
#命名参数必须写在最后。否则会编译报错!
s1 = "{},{},说得对吗:{说得对吗}".format('努力不一定成功',说得对吗="Y", '但放弃一定会失败')
print(s)
运行结果
SyntaxError: positional argument follows keyword argument
Exited with error status 1
语法错误:位置参数跟在关键字参数后面
已退出,错误状态为 1
代 码
#不可以索引和默认格式化混合使用
s = "{} and {0}".format('Cat', 'Dog', )
print(s)
运行结果
ValueError: cannot switch from automatic field numbering to manual field specification
Exited with error status 1
值错误:无法从自动字段编号切换到手动字段规范
已退出,错误状态为 1
代 码
#不可以索引和默认格式化混合使用
s = "{} and {1}".format('Cat', 'Dog', )
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)左对齐及填充格式化字符串
- :width时,输全部字符串
调用函数对齐及填充格式化字符串
代 码
# 字符串左侧对齐, 右侧补❄:
str1 = "逆境清醒"
width = 20
print(str1.ljust(width, '❄'))
运行结果
逆境清醒❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄
代 码 # 字符串左侧对齐, 右侧补❄:
str1 = "逆境清醒"
width = 20
print("{}".format(str1.ljust(width, '❄')) )
运行结果
逆境清醒❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄
代 码
# 字符串右侧对齐, 左侧补❄:
str1 = "逆境清醒"
width = 20
print(str1.rjust(width, '❄'))
print("{}".format(str1.rjust(width, '❄')) )
运行结果
❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄逆境清醒
❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄逆境清醒
代 码
# center字符串居中对齐, 两侧侧补❄
str1 = "逆境清醒"
width = 20
print(str1.center(width, '❄'))
print("{}".format(str1.center(width, '❄')) )
运行结果
❄❄❄❄❄❄❄❄逆境清醒❄❄❄❄❄❄❄❄
❄❄❄❄❄❄❄❄逆境清醒❄❄❄❄❄❄❄❄
代 码
# 字符串右侧对齐, 左侧补0
str1 = "逆境清醒"
width = 20
print(str1.zfill(width))
print("{}".format(str1.zfill(width)) )
运行结果
0000000000000000逆境清醒
0000000000000000逆境清醒
📘 四、用format函数实现对齐打印
📖(1)打印左对齐图案
代码:
def show(n): numlast = "🌸"*(2*n-1) width = len(numlast) 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
SVG实例详解系列(一)(svg概述、位图和矢量图区别(图解)、SVG应用实例)
28
查看jdk安装路径,在windows上实现多个java jdk的共存解决办法,安装java19后终端乱码的解决
27
别具一格,原创唯美浪漫情人节表白专辑,(复制就可用)(html5,css3,svg)表白爱心代码(1)
26
2023年春节祝福第二弹——送你一只守护兔,让它温暖每一个你【html5 css3】画会动的小兔子,炫酷充电,字体特
25
2023春节祝福系列第一弹(上)(放飞祈福孔明灯,祝福大家身体健康)(附完整源代码及资源免费下载)
24
HTML+CSS+svg绘制精美彩色闪灯圣诞树,HTML+CSS+Js实时新年时间倒数倒计时(附源代码)
23
草莓熊python绘图(春节版,圣诞倒数雪花版)附源代码
22
【程序人生】卡塔尔世界杯元素python海龟绘图(附源代码),世界杯主题前端特效5个(附源码)
21
python爱心源代码集锦(18款)
20
巴斯光年python turtle绘图__附源代码
19
Three.js实例详解___旋转的精灵女孩(附完整代码和资源)(一)
18
草莓熊python turtle绘图代码(玫瑰花版)附源代码
17
立体多层玫瑰绘图源码__玫瑰花python 绘图源码集锦
16
皮卡丘python turtle海龟绘图(电力球版)附源代码
15
【CSDN云IDE】个人使用体验和建议(含超详细操作教程)(python、webGL方向)
14
草莓熊python turtle绘图(风车版)附源代码
13
用代码过中秋,python海龟月饼你要不要尝一口?
12
《 Python List 列表全实例详解系列(一)》__系列总目录、列表概念
11
用代码写出浪漫__合集(python、matplotlib、Matlab、java绘制爱心、玫瑰花、前端特效玫瑰、爱心)
10
Python函数方法实例详解全集(更新中...)
9
matplotlib 自带绘图样式效果展示速查(28种,全)
8
手机屏幕坏了____怎么把里面的资料导出(18种方法)
7
2023年3月TIOBE 指数头条:编程语言 Go 进入 TIOBE 指数前 10 名,多家权威机构____编程语言排行榜__薪酬状
6
Python中Print()函数的用法___实例详解(全,例多)
5
色彩颜色对照表(一)(16进制、RGB、CMYK、HSV、中英文名)
4
Node.js (v19.1.0npm 8.19.3) vue.js安装配置教程(超详细)
3
Tomcat 启动闪退问题解决集(八大类详细)
2
Tomcat端口配置(详细)
1
tomcat11、tomcat10 安装配置(Windows环境)(详细图文)
- :width时,输全部字符串
- 类定义
- 主要格式:print('{关键字索引1} {关键字索引2}'.format(关键字索引1='关键字1',关键字索引2='关键字2'))