详解字符串的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. 格式说明符

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

相关文章
|
21天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
26天前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python进行数据分析的入门指南
本文将引导读者了解如何使用Python进行数据分析,从安装必要的库到执行基础的数据操作和可视化。通过本文的学习,你将能够开始自己的数据分析之旅,并掌握如何利用Python来揭示数据背后的故事。
|
22天前
|
IDE 程序员 开发工具
Python编程入门:打造你的第一个程序
迈出编程的第一步,就像在未知的海洋中航行。本文是你启航的指南针,带你了解Python这门语言的魅力所在,并手把手教你构建第一个属于自己的程序。从安装环境到编写代码,我们将一步步走过这段旅程。准备好了吗?让我们开始吧!
|
20天前
|
存储 测试技术 Python
Python 中别再用 ‘+‘ 拼接字符串了!
通过选择合适的字符串拼接方法,可以显著提升 Python 代码的效率和可读性。在实际开发中,根据具体需求和场景选择最佳的方法,避免不必要的性能损失。
41 5
|
22天前
|
测试技术 开发者 Python
探索Python中的装饰器:从入门到实践
装饰器,在Python中是一块强大的语法糖,它允许我们在不修改原函数代码的情况下增加额外的功能。本文将通过简单易懂的语言和实例,带你一步步了解装饰器的基本概念、使用方法以及如何自定义装饰器。我们还将探讨装饰器在实战中的应用,让你能够在实际编程中灵活运用这一技术。
37 7
|
24天前
|
Python
使用Python计算字符串的SHA-256散列值
使用Python计算字符串的SHA-256散列值
25 7
|
23天前
|
开发者 Python
Python中的装饰器:从入门到实践
本文将深入探讨Python的装饰器,这一强大工具允许开发者在不修改现有函数代码的情况下增加额外的功能。我们将通过实例学习如何创建和应用装饰器,并探索它们背后的原理和高级用法。
36 5
|
22天前
|
机器学习/深度学习 人工智能 算法
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
59 3
|
26天前
|
Python
Python编程入门:从零开始的代码旅程
本文是一篇针对Python编程初学者的入门指南,将介绍Python的基本语法、数据类型、控制结构以及函数等概念。文章旨在帮助读者快速掌握Python编程的基础知识,并能够编写简单的Python程序。通过本文的学习,读者将能够理解Python代码的基本结构和逻辑,为进一步深入学习打下坚实的基础。
|
7月前
|
人工智能 Java Python
python入门(二)安装第三方包
python入门(二)安装第三方包
107 1