Python中的字符串格式化

引子

众所周知,我们可以使用 print() 方法来输出一个固定内容的字符串,就像是 print("Hello, world!") 一样。但是,在现实中,我们很多时候是需要输出一些内容不断变化,或者内容动态生成的字符串,例如,我们不再输出 "Hello, world!",而是输出 "Hello, Mike!" 或者 "Hello, Tom!"。

这个时候我们该怎么做呢?

本文将介绍如何按照需要,在Python中格式化一个字符串。

"string.format()"方法

在Python中,有几种格式化字符串的方法,包括 % 格式化方法、str.format() 方法和最近在Python 3.6中引入的 f-strings 方法(也称为格式化字符串字面量)。每种方法都有其自己的优点和缺点,但它们都可以用于格式化字符串。

在Python 3.6版本之前,我们推荐使用 str.format() 方法格式化字符串。该方法通过将字符串中的占位符替换为值来格式化字符串。该方法具有多个可选参数,允许开发人员自定义输出的格式。

str.format() 方法的基本语法为:

python 复制代码
string.format(value1, value2, ...)

其中,string 是我们要格式化的字符串,value1value2 等是要替换到字符串中的占位符的值。

字符串中的占位符由成对的大括号 {} 表示。在大括号内部,我们可以使用格式说明符来控制被替换的值的格式。

以下是一些常用的格式说明符:

  • {}

    这是最简单的格式说明符,它只是原样替换值。

  • {:<N}

    这个说明符将值左对齐,并在右侧填充空格,以达到总宽度N。

  • {:>N}

    这个说明符将值右对齐,并在左侧填充空格,以达到总宽度N。

  • {:^N}

    这个说明符将值居中,并在两侧填充空格,以达到总宽度N。

  • {:.Nf}

    这个说明符将浮点数格式化为N位小数。

  • {:.Ng}

    这个说明符将数字格式化为N位有效数字。

  • {:.N%}

    这个说明符将浮点数格式化为带有N位小数的百分比。

除了这些格式说明符外,str.format()方法还支持许多其他参数:

  • sep

    指定在连接多个值时要使用的分隔符字符。

  • end

    指定要附加到输出结尾的字符串。

  • file

    指定要将输出写入的文件对象。

  • flush

    指定在写入输出后是否刷新输出缓冲区。

下面,我们来看几个使用 str.format() 方法格式化字符串的例子:

bash 复制代码
>>> name = "Alice"
>>> age = 30
>>> print("My name is {} and I am {} years old.".format(name, age))
My name is Alice and I am 30 years old.

你也可以通过给参数命名来替换占位符,例如:

bash 复制代码
>>> print("My name is {name} and I am {age} years old.".format(name=name, age=age))
My name is Alice and I am 30 years old.

你还可以重复使用相同的参数,例如:

bash 复制代码
>>> print("My name is {name} and I am {age} years old. I repeated my name {name}".format(name=name, age=age))
My name is Alice and I am 30 years old. I repeated my name Alice

我们还是可以尝试使用更复杂一点的参数,例如:

bash 复制代码
>>> x = 12345.6789
>>> y = 98765.4321
>>> message = "x = {:.2f}, y = {:.2f}".format(x, y)
>>> print(message)
x = 12345.68, y = 98765.43

在这个示例中,我们使用 str.format() 方法来格式化两个浮点数 xy。我们使用 :.2f 格式说明符,将数字格式化为两位小数。

一般来说,在Python 3.6版本之前,我们都推荐使用 string.format() 方法来格式化字符串。

"f-string"语法

在Python 3.6及更高版本中,Python提供了一种称为 f-string (也叫 f-stringsf-interpolation) 的新语法,可以更简单地格式化字符串。

f-string 的语法是通过在字符串前面加上一个前缀 fF,然后在字符串中插入表达式的方式来格式化字符串。表达式需要用大括号 {} 括起来。

例如,你可以使用以下代码格式化字符串:

bash 复制代码
>>> name = "Alice"
>>> age = 30
>>> print(f"My name is {name} and I am {age} years old.")
My name is Alice and I am 30 years old.

你还可以在表达式中调用函数或运算符,例如:

bash 复制代码
>>> import math
>>> print(f"2*2={2*2}, pi={math.pi}")
2*2=4, pi=3.141592653589793

也可以通过在表达式的后面添加一个冒号和格式说明符来格式化输出,例如,你可以使用以下语法来保留小数点后两位:

bash 复制代码
>>> print(f"The value of pi is approximately {math.pi:.2f}.")
The value of pi is approximately 3.14.

你还可以使用冒号和格式说明符来指定字符串的对齐方式、宽度和其他格式选项。

例如,你可以使用以下语法来左对齐一个字符串,并在右侧填充空格以达到指定宽度:

python 复制代码
>>> name = 'Alice'
>>> print(f"{name:<10}")
Alice    

str.format() 方法类似,f-string 方法也可以使用若干格式说明符来指定格式:

  • :d:i 转换为有符号十进制整数;
  • :o 转换为无符号八进制整数;
  • :x, :X 转换为无符号十六进制整数,x 表示小写,X 表示大写;
  • :e, :E 转换为科学计数法,e 表示小写,E 表示大写;
  • :f, :F 转换为十进制浮点数,f 表示小写,F 表示大写;
  • :g, :G 转换为十进制浮点数,尽量使用科学计数法,g表示小写,G 表示大写;
  • :% 转换为百分数;
  • :c 转换为字符;
  • :s 转换为字符串;

如果你需要在字符串中插入大括号,可以使用双大括号 {{}},这样Python就会将它们当作普通字符而不是占位符:

bash 复制代码
>>> print(f"{{name}} is a placeholder")
{name} is a placeholder

你还可以使用 f-string 格式化字典对象:

bash 复制代码
>>> person = {'name': 'Alice', 'age': 30}
>>> print(f"My name is {person['name']} and I am {person['age']} years old.")
My name is Alice and I am 30 years old.

目前,f-string 是Python中最简单,最快,也是最常用的字符串格式化方式,我们推荐开发人员在Python 3.6及以上版本中使用。

总结

在Python开发中,格式化字符串是一种重要的技术,可以用于动态创建包含变量、表达式和其他数据的字符串。它允许开发人员通过将字符串的某些部分替换为变量、表达式或其他字符串的值来构造复杂的字符串。

在Python中,目前有三种主要的格式化字符串方法,包括 % 格式化方法、str.format() 方法和 f-strings 方法。我们推荐开发人员在Python 3.6及以上版本中使用 f-string 方法来格式化字符串。

学习Python基础,请浏览《百例讲透Python基础》

相关推荐
星光樱梦18 分钟前
02. Python基础知识
python
亚图跨际21 分钟前
MATLAB和C++及Python流式细胞术
c++·python·matlab·流式细胞术
steamedobun30 分钟前
【爬虫】Firecrawl对京东热卖网信息爬取(仅供学习)
爬虫·python
右恩35 分钟前
Docker 实践与应用举例
python·docker
凤枭香39 分钟前
Python Scikit-learn简介(二)
开发语言·python·机器学习·scikit-learn
湫ccc8 小时前
《Python基础》之字符串格式化输出
开发语言·python
mqiqe9 小时前
Python MySQL通过Binlog 获取变更记录 恢复数据
开发语言·python·mysql
AttackingLin9 小时前
2024强网杯--babyheap house of apple2解法
linux·开发语言·python
哭泣的眼泪4089 小时前
解析粗糙度仪在工业制造及材料科学和建筑工程领域的重要性
python·算法·django·virtualenv·pygame
湫ccc10 小时前
《Python基础》之基本数据类型
开发语言·python