字符串插值是一个将变量值替换到字符串占位符中的过程。例如,如果你有一个问候人的模板,比如“你好 {人名},很高兴认识你!”,你希望将“人名”的占位符替换为实际的姓名。这个过程叫做字符串插值。
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 将 name 和 program 这两个字符串变量的值替换到大括号 {}
中。所以,当我们 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
字符串格式说明符和两个字符串 Hello
和 World
(在括号 ()
中)。我们得到了 Hello World
作为输出。%s
字符串格式说明符告诉 Python 在哪里替换值。
字符串格式化语法会略有变化。如果我们想在单个字符串中进行多次替换,并且 %
运算符只有一个参数,我们需要将右侧包装在一个元组中,如下面的示例所示。
示例 4
name = 'world'
program ='python'
print('Hello %s! This is %s.'%(name,program))
当我们运行上述程序时,输出将是
Hello world! This is python.
在上面的示例中,我们使用了两个字符串变量 name 和 program。我们将这两个变量包装在括号 ()
中。
我们也可以在格式字符串中通过名称引用变量替换,如果我们向 %
运算符传递一个映射。
示例 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
类,并创建了一个模板,我们使用它来传递两个变量。
要记住的关键点
- %-format 方法是一种非常旧的插值方法,不推荐使用,因为它降低了代码的可读性。
- 在 str.format() 方法中,我们将字符串对象传递给 format() 函数进行字符串插值。
- 在 template 方法中,我们通过导入内置 string 模块的 template 类来创建模板。
- 字面字符串插值方法是一种功能强大且易于使用的插值方法,可以提高代码的可读性。