详解字符串的format⽅法的使用 | 手把手教你入门Python之三十

简介: 本节重点介绍字符串的format⽅法

上一篇:介绍2种成员运算符 | 手把手教你入门Python之二十九
下一篇:列表的基本使用介绍 | 手把手教你入门Python之三十一

本文来自于千锋教育在阿里云开发者社区学习中心上线课程《Python入门2020最新大课》,主讲人姜伟。

1. 概念:

str.format() ⽅法通过字符串中的⼤括号 {} 来识别替换字段 replacement field ,从⽽完成字符串的格式化。

替换字段 由字段名 field name 和转换字段 conversion field 以及格式说明符format specifier 组成,即⼀般形式为 {字段名!转换字段:格式说明符}。

字段名分为简单字段名 simple field name 和复合字段名 compound field name 。⽽转换字段和格式说明符都是可选的。

2. 字段名

form的完整格式是{字段名!转换字符:格式说明符}。其中字段名师必须的,⽽且可以分为简单字段名和复合字段名。

2.1 简单字段名

简单字段名由三中写法:

  • 省略字段名: {}
  • 使⽤⾮负⼗进制整数 {0}
  • 变量名{name}

image.png

2.1.1 省略字段名

⼤括号内省略字段名,传递位置参数。

  • 替换字段形式: {}
  • 注意:⼤括号个数可以少于位置参数的个数,反之不然。
# 省略字段名传递位置参数
print('我叫{},今年{}岁。'.format('⼩明', 18))
"""
我叫⼩明,今年18岁。
"""
# ⼤括号个数可以少于位置参数的个数
print('我爱吃{}和{}。'.format('⾹蕉', '苹果', '⼤鸭梨'))
"""
我爱吃⾹蕉和苹果。
"""
# ⼤括号个数多于位置参数的个数则会报错
# print('我还吃{}和{}。'.format('⻄红柿'))
"""
IndexError: tuple index out of range
"""

2.1.2 数字字段名

可以通过数字形式的简单字段名传递位置参数。
数字必须是⼤于等于 0 的整数。
带数字的替换字段可以重复使⽤。
数字形式的简单字段名相当于把 format 中的所有位置参数整体当作⼀个元组,通过字段名中的数字进⾏
取值。即 {0} 等价于 tuple[0],所以⼤括号内的数字不能越界。

# 通过数字形式的简单字段名传递位置参数
print('身⾼{0},家住{1}。'.format(1.8, '铜锣湾'))
"""
身⾼1.8,家住铜锣湾
"""
# 数字形式的简单字段名可以重复使⽤。
print('我爱{0}。\n她今年{1}。\n我也爱{0}。'.format('阿⾹', 17))
"""
我爱阿⾹。
她今年17。
我也爱阿⾹。
"""
# 体会把所有位置参数整体当成元组来取值
print('阿⾹爱吃{1}、{3}和{0}。'.format(
 '榴莲', '臭⾖腐', '⽪蛋', '鲱⻥罐头', '螺狮粉'))
"""
阿⾹爱吃臭⾖腐、鲱⻥罐头和榴莲。
"""
# 尝试⼀下越界错误
# print('{1}'.format('错误⽤法'))
"""
IndexError: tuple index out of range
"""

2.1.3 变量字段名

使⽤变量名形式的简单字段名传递关键字参数。

  • 关键字参数的位置可以随意调换。
# 使⽤变量名形式的简单字段名传递关键字参数
print('我⼤哥是{name},今年{age}岁。'.format(name='阿⻜', age=20))
"""
我⼤哥是阿⻜,今年20岁。
"""
# 关键字参数的顺序可以随意调换
print('我⼤哥是{name},今年{age}岁。'.format(age=20, name='阿⻜'))
"""
我⼤哥是阿⻜,今年20岁。
"""

2.1.4 简单字段名的混合使⽤

  • 混合使⽤数字形式和变量名形式的字段名,可以同时传递位置参数和关键字参数。
  • 关键字参数必须位于位置参数之后。
  • 混合使⽤时可以省略数字。
    省略字段名 {} 不能和数字形式的字段名 {⾮负整数} 同时使⽤。
# 混合使⽤数字形式和变量名形式的字段名
# 可以同时传递位置参数和关键字参数
print('这是⼀个关于{0}、{1}和{girl}的故事。'.format(
 '⼩明', '阿⻜', girl='阿⾹'))
"""
这是⼀个关于⼩明、阿⻜和阿⾹的故事。
"""
# 但是关键字参数必须位于位置参数之后
# print('这是⼀个关于{0}、{1}和{girl}的故事。'.format(
 # '⼩明', girl='阿⾹' , '阿⻜'))
"""
SyntaxError: positional argument follows keyword argument
"""
# 数字也可以省略
print('这是⼀个关于{}、{}和{girl}的故事。'.format(
 '⼩明', '阿⻜', girl='阿⾹'))
# 但是省略字段名不能和数字形式的字段名同时出现
# print('这是⼀个关于{}、{1}和{girl}的故事。'.format(
# '⼩明', '阿⻜', girl='阿⾹'))
"""
ValueError: cannot switch from automatic field numbering to manual field specifica
tion
"""

image.png

image.png

2.1.5 使⽤元组和字典传参

str.format() ⽅法还可以使⽤ 元组 和 *字典 的形式传参,两者可以混合使⽤。 位置参数、关
键字参数、 元组 和 字典 也可以同时使⽤,但是要注意,位置参数要在关键字参数前⾯, 元组
要在 **字典 前⾯。

# 使⽤元组传参
infos = '钢铁侠', 66, '⼩辣椒'
print('我是{},身价{}亿。'.format(*infos))
"""
我是钢铁侠,身家66亿。
"""
print('我是{2},身价{1}亿。'.format(*infos))
"""
我是⼩辣椒,身家66亿。
"""
# 使⽤字典传参
venom = {'name': '毒液', 'weakness': '⽕'}
print('我是{name},我怕{weakness}。'.format(**venom))
"""
我是毒液,我怕⽕。
"""
# 同时使⽤元组和字典传参
hulk = '绿巨⼈', '拳头'
captain = {'name': '美国队⻓', 'weapon': '盾'}
print('我是{}, 我怕{weapon}。'.format(*hulk, **captain))
print('我是{name}, 我怕{1}。'.format(*hulk, **captain))
"""
我是绿巨⼈, 我怕盾。
我是美国队⻓, 我怕拳头。
"""
# 同时使⽤位置参数、元组、关键字参数、字典传参
# 注意:
# 位置参数要在关键字参数前⾯
# *元组要在**字典前⾯
tup = '鹰眼',
dic = {'weapon': '箭'}
text = '我是{1},我怕{weakness}。我是{0},我⽤{weapon}。'
text = text.format(
 *tup, '⿊寡妇', weakness='男⼈', **dic)
print(text)
"""
我是⿊寡妇,我怕男⼈。我是鹰眼,我⽤箭。
"""

2.2 复合字段名

  • 同时使⽤了数字和变量名两种形式的字段名就是复合字段名。
  • 复合字段名

⽀持两种操作符:
. 点号
[] 中括号

2.2.1 使⽤ . 点号

传递位置参数

  • 替换字段形式: {数字.属性名}
  • 只有⼀个替换字段的时候可以省略数字
class Person(object):
 def __init__(self,name,age,gender):
 self.name = name
 self.age = age
 self.gender = gender
p = Person('zhangsan',18,'female')
print('姓名是{0.name},年龄是{0.age},性别是{0.gender}'.format(p))
print('姓名是{.name}'.format(p)) # 只有⼀个替换字段时,可以省略数字

2.2. 使⽤ [] 中括号

  • ⽤列表传递位置参数
  • ⽤元组传递位置参数
  • ⽤字典传递位置参数
# 中括号⽤法:⽤列表传递位置参数
infos = ['阿星', 9527]
food = ['霸王花', '爆⽶花']
print('我叫{0[0]},警号{0[1]},爱吃{1[0]}。'.format(
 infos, food))
"""
我叫阿星,警号9527,爱吃霸王花。
"""
# 中括号⽤法:⽤元组传递位置参数
food = ('僵⼫', '脑⼦')
print('我叫{0[0]},年龄{1},爱吃{0[1]}。'.format(
 food, 66))
"""
我叫僵⼫,年龄66,爱吃脑⼦。
"""
# 中括号⽤法:⽤字典传递位置参数
dic = dict(name='阿星', pid=9527)
print('我是{[name]}!'.format(
 dic))
# 多个替换字段,不能省略数字
print('我是{0[name]},警号{0[pid]}。'.format(
 dic))
"""
我是阿星!
我是阿星,警号9527。
"""

3. 转换字段

转换字段 conversion field 的取值有三种,前⾯要加 ! :

  • s :传递参数之前先对参数调⽤ str()
  • r :传递参数之前先对参数调⽤ repr()
  • a :传递参数之前先对参数调⽤ ascii()
    ascii() 函数类似 repr() 函数,返回⼀个可以表示对象的字符串。 但是对于⾮ ASCII 字

符,使⽤ x , u 或者 U 转义。

# 转换字段
print('I am {!s}!'.format('Bruce Lee 李⼩⻰'))
print('I am {!r}!'.format('Bruce Lee 李⼩⻰'))
print('I am {!a}!'.format('Bruce Lee 李⼩⻰'))
"""
I am Bruce Lee 李⼩⻰!
I am 'Bruce Lee 李⼩⻰'!
I am 'Bruce Lee \u674e\u5c0f\u9f99'!
"""

4. 格式说明符

格式说明符使⽤过于复杂,且实际使⽤场景不多,暂不讨论。

相关文章
|
4月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
610 7
|
5月前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
491 1
|
5月前
|
Python
Python中的f-string:更优雅的字符串格式化
Python中的f-string:更优雅的字符串格式化
391 100
|
5月前
|
开发者 Python
Python中的f-string:高效字符串格式化的利器
Python中的f-string:高效字符串格式化的利器
545 99
|
5月前
|
Python
Python中的f-string:更优雅的字符串格式化
Python中的f-string:更优雅的字符串格式化
|
4月前
|
Cloud Native 算法 API
Python API接口实战指南:从入门到精通
🌟蒋星熠Jaxonic,技术宇宙的星际旅人。深耕API开发,以Python为舟,探索RESTful、GraphQL等接口奥秘。擅长requests、aiohttp实战,专注性能优化与架构设计,用代码连接万物,谱写极客诗篇。
Python API接口实战指南:从入门到精通
|
4月前
|
存储 Java 索引
(Python基础)新时代语言!一起学习Python吧!(二):字符编码由来;Python字符串、字符串格式化;list集合和tuple元组区别
字符编码 我们要清楚,计算机最开始的表达都是由二进制而来 我们要想通过二进制来表示我们熟知的字符看看以下的变化 例如: 1 的二进制编码为 0000 0001 我们通过A这个字符,让其在计算机内部存储(现如今,A 字符在地址通常表示为65) 现在拿A举例: 在计算机内部 A字符,它本身表示为 65这个数,在计算机底层会转为二进制码 也意味着A字符在底层表示为 1000001 通过这样的字符表示进行转换,逐步发展为拥有127个字符的编码存储到计算机中,这个编码表也被称为ASCII编码。 但随时代变迁,ASCII编码逐渐暴露短板,全球有上百种语言,光是ASCII编码并不能够满足需求
238 4
|
4月前
|
存储 Java 调度
Python定时任务实战:APScheduler从入门到精通
APScheduler是Python强大的定时任务框架,通过触发器、执行器、任务存储和调度器四大组件,灵活实现各类周期性任务。支持内存、数据库、Redis等持久化存储,适用于Web集成、数据抓取、邮件发送等场景,解决传统sleep循环的诸多缺陷,助力构建稳定可靠的自动化系统。(238字)
887 1
|
存储 安全 Serverless
Python学习四:流程控制语句(if-else、while、for),高级数据类型(字符串、列表、元组、字典)的操作
这篇文章主要介绍了Python中的流程控制语句(包括if-else、while、for循环)和高级数据类型(字符串、列表、元组、字典)的操作。
353 0
|
Python
Python操作:字符串--列表--元组--字典--运算符 (一)
Python操作:字符串--列表--元组--字典--运算符 (一)
180 0

推荐镜像

更多