Python 字符串插值

字符串插值是一个将变量值替换到字符串占位符中的过程。例如,如果你有一个问候人的模板,比如“你好 {人名},很高兴认识你!”,你希望将“人名”的占位符替换为实际的姓名。这个过程叫做字符串插值。

f-strings

Python 3.6 引入了一种新的字符串插值方法,称为字面字符串插值,并引入了一个新的字面量前缀 f。这种新的字符串格式化方式功能强大且易于使用。它允许在字符串常量中嵌入 Python 表达式。

示例 1

name = 'World'
program = 'Python'
print(f'Hello {name}! This is {program}')

当我们运行上述程序时,输出将是

Hello World! This is Python

在上面的示例中,字面量前缀 f 告诉 Python 将 nameprogram 这两个字符串变量的值替换到大括号 {} 中。所以,当我们 print 时,我们得到了上面的输出。

这种新的字符串插值非常强大,因为我们可以嵌入任意的 Python 表达式,甚至可以进行内联算术运算。

示例 2

a = 12
b = 3
print(f'12 multiply 3 is {a * b}.')

当我们运行上述程序时,输出将是

12 multiply 3 is 36.

在上面的程序中,我们进行了内联算术运算,这是只有使用这种方法才有可能实现的。


%-formatting

Python 中的字符串有一个独特的内置操作,可以通过 % 运算符访问。使用 % 我们可以非常轻松地进行简单的字符串插值。

示例 3

print("%s %s" %('Hello','World',))

当我们运行上述程序时,输出将是

Hello World

在上面的示例中,我们使用了两个 %s 字符串格式说明符和两个字符串 HelloWorld(在括号 () 中)。我们得到了 Hello World 作为输出。%s 字符串格式说明符告诉 Python 在哪里替换值。

字符串格式化语法会略有变化。如果我们想在单个字符串中进行多次替换,并且 % 运算符只有一个参数,我们需要将右侧包装在一个元组中,如下面的示例所示。

示例 4

name = 'world'
program ='python'
print('Hello %s! This is %s.'%(name,program))

当我们运行上述程序时,输出将是

Hello world! This is python.

在上面的示例中,我们使用了两个字符串变量 nameprogram。我们将这两个变量包装在括号 () 中。

我们也可以在格式字符串中通过名称引用变量替换,如果我们向 % 运算符传递一个映射。

示例 5

name = 'world' 
program ='python'
print(‘Hello %(name)s! This is %(program)s.’%(name,program))

当我们运行上述程序时,输出将是

Hello world! This is python.

这使得我们的格式字符串更容易维护,并且将来更容易修改。我们不必担心传递值的顺序与格式字符串中引用的值的顺序。


Str.format()

在这种字符串格式化中,我们在字符串对象上使用 format() 函数和花括号 {}format() 函数中的字符串对象被替换到花括号 {} 的位置。我们可以使用 format() 函数进行简单的位置格式化,就像 % 格式化一样。

示例 6

name = 'world'
print('Hello, {}'.format(name))

当我们运行上述程序时,输出将是

Hello,world

在这个例子中,我们使用花括号 {}format() 函数来传递 name 对象。我们在输出中获得了 name 的值,它位于花括号 {} 的位置。

我们可以通过名称引用我们的变量替换,并以我们想要的任何顺序使用它们。这是一个非常强大的功能,因为它允许我们在不更改传递给 format 函数的参数的情况下重新排列显示顺序。

示例 7

name = 'world'
program ='python'
print('Hello {name}!This is{program}.'.format(name=name,program=program))

当我们运行上述程序时,输出将是

Hello world!This is python.

在这个例子中,我们使用变量名指定了变量替换的位置,并将变量传递给 format()


Template Strings

Template Strings 是一种更简单、功能较弱的字符串插值机制。我们需要从 Python 内置的 string 模块导入 Template 类来使用它。

示例 8

from string import Template
name = 'world'
program ='python'
new = Template('Hello $name! This is $program.')
print(new.substitute(name= name,program=program))

当我们运行上述程序时,输出将是

Hello world! This is python.

在这个例子中,我们从内置的 string 模块导入了 Template 类,并创建了一个模板,我们使用它来传递两个变量。


要记住的关键点

  1. %-format 方法是一种非常旧的插值方法,不推荐使用,因为它降低了代码的可读性。
  2. 在 str.format() 方法中,我们将字符串对象传递给 format() 函数进行字符串插值。
  3. 在 template 方法中,我们通过导入内置 string 模块的 template 类来创建模板。
  4. 字面字符串插值方法是一种功能强大且易于使用的插值方法,可以提高代码的可读性。
你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战