当你在 Python 中格式化字符串时,你可能习惯于使用format()
方法。
但在 Python 3.6 及以后的版本中,你可以使用f- 字符串来代替。f-字符串,也被称为*格式化字符串字面,*有一个更简洁的语法,在字符串格式化中可能会有很大帮助。
在本教程中,你将学习 Python 中的 f-字符串,以及使用它们来格式化字符串的几种不同方法。
什么是 Python 中的 f-字符串?
Python 中的字符串通常被括在双引号 (""
) 或单引号 (''
) 内。要创建 f 字符串,你只需要在字符串的开头引号前添加一个f
或F
。
例如,
"This"
是一个字符串,而f"This"
是一个 f-字符串。
如何使用 Python f-Strings 打印变量
当使用 f-Strings 显示变量时,你只需要在一组大括号内指定变量的名字{}
。而在运行时,所有的变量名都会被替换成它们各自的值。
如果你在字符串中有多个变量,你需要把每个变量的名字都放在一组大括号里。
语法如下所示:
f"This is an f-string {var_name} and {var_name}."
▶这里有一个例子:
你有两个变量,language
和school
,在 f-String 中用大括号括起来。
language = "Python"
school = "freeCodeCamp"
print(f"I'm learning {language} from {school}.")
让我们看一下输出:
#Output
I'm learning Python from freeCodeCamp.
注意到变量language
和school
已经分别被替换为Python
和freeCodeCamp
。
如何用 Python f-Strings 评估表达式
由于 f-字符串是在运行时评估的,所以你也可以在运行时评估有效的 Python 表达式。
▶在下面的例子中,num1
和num2
是两个变量。为了计算它们的乘积,你可以在一组大括号内插入表达式num1 * num2
:
num1 = 83
num2 = 9
print(f"The product of {num1} and {num2} is {num1 * num2}.")
注意在输出中,num1 * num2
被num1
和num2
的乘积所取代:
#Output
The product of 83 and 9 is 747.
我希望你现在能够看到这个模式。
在任何f-String中,{var_name}
,{expression}
作为变量和表达式的占位符,并在运行时被替换成相应的值。
到下一节去学习更多关于f-字符串的知识。
如何在 Python f-字符串中使用条件语句
让我们首先回顾一下 Python 的if..else
语句。一般的语法如下所示:
if condition:
# do this if condition is True <true_block>
else:
# do this if condition is False <false_block>
这里,condition
是表达式,其真值被检查:
- 如果
condition
的值是True
,那么 if 块中的语句 (<true_block>
) 将被执行。 - 如果
condition
的值为False
,则执行 else 块中的语句 (<false_block>
) 。
对于上述if..else
块,有一个更简洁的单行等价物,其语法如下:
<true_block> if <condition> else <false_block>
在上面的语法中,
<true block>
是当condition
是True
时要做的事情,而<false_block>
是当条件是False
时要执行的语句。
如果你以前没有见过这种语法,可能看起来有点不同。如果让事情变得更简单,你可以把它读成:"这样做 if
condition
是True
;else
,这样做"。
这在Python中通常被称为三元运算符,因为它在某种意义上需要3个操作数--真块、被测条件和假块。
▶让我们举一个使用三元运算符的简单例子。
给定一个数字num
,你想检查它是否是偶数。你知道,如果一个数字能被2偶数整除,它就是偶数。让我们用这个来写我们的表达式,如下所示:
num = 87;
print(f"Is num even? {True if num%2==0 else False}")
在上面的代码片断中:
num%2==0
是条件- 如果条件是
True
,你只需返回True
,表示num
确实是偶数,否则False
#Output
Is num even? False
在上面的例子中,num
是87,是奇数。因此,f-String 中的条件语句被替换为False
。
如何用 Python f-字符串调用方法
到目前为止,你只看到了如何打印变量的值,评估表达式,以及在 f-String 中使用条件语句。现在是提升水平的时候了。
▶让我们来看看下面的例子:
author = "jane smith"
print(f"This is a book by {author}.")
上面的代码打印出This is a book by jane smith.
如果它打印出This is a book by Jane Smith.
,不是更好吗?是的,在Python中,字符串方法返回有必要修改的字符串:
Python中的
title()
方法返回一个新的字符串,它的格式是标题的大小写--名字通常的格式 (First_name Last_name
)。
要打印出以标题大小写格式化的作者姓名,你可以做以下事情:
- 对字符串
author
使用title()
方法。 - 将返回的字符串存储在另一个变量中,并
- 使用 f-String 打印它,如下所示:
author = "jane smith"
a_name = author.title()
print(f"This is a book by {a_name}.")
#Output
This is a book by Jane Smith.
然而,你可以用f-Strings只用一个步骤就能做到这一点。author
你只需要在f-String内的大括号内调用字符串title()
方法:
author = "jane smith"
print(f"This is a book by {author.title()}.")
当f-String在运行时被解析时:
title()
方法被调用到字符串author
上,并且- 返回的字符串被打印出来,它被格式化为标题大小写。
你可以在下面显示的输出中验证这一点:
#Output
This is a book by Jane Smith.
你可以在大括号内对任何有效的 Python 对象进行方法调用,它们都能正常工作。
如何在 Python f-字符串中调用函数
除了在 Python 对象上调用方法外,你还可以在 f-字符串中调用函数。它的工作原理与你之前看到的非常相似。
就像变量名被值所替代,表达式被评估结果所替代一样,函数调用也被函数的返回值所替代。
▶让我们以下面所示的函数choice()
:
def choice(c):
if c%2 ==0:
return "Learn Python!"
else:
return "Learn JavaScript!"
如果以偶数作为参数调用,上述函数返回"Learn Python!"
。而当函数调用的参数为奇数时,则返回"Learn JavaScript!"
。
▶在下图所示的例子中,你有一个f-String,在大括号内有一个对选择函数的调用:
print(f"Hello Python, tell me what I should learn. {choice(3)}")
由于参数是一个奇数 (3
),Python 建议你学习 JavaScript,如下所示:
#Output
Hello Python, tell me what I should learn. Learn JavaScript!
如果你用偶数调用函数choice()
,你会看到Python告诉你改学Python:
print(f"Hello Python, tell me what I should learn. {choice(10)}")
#Output
Hello Python, tell me what I should learn. Learn Python!
就这样,我们的教程在愉快的气氛中结束了
总结
在本教程中,你已经学会了如何使用f-Strings来:
- 打印变量的值
- 评估表达式
- 调用其它 Python 对象上的方法,以及
- 调用 Python 函数
这里是Jessica的一篇文章,解释了使用format()
方法的字符串格式化。