python中f-string的基本用法

 更新时间:2024年12月03日 10:56:03   作者:五月天的尾巴  
f-string是Python3.6及以上版本中新增的一种格式化字符串方式,本文就来介绍了python中f-string的基本用法,具有一定的参考价值,感兴趣的可以了解一下

Python 中的print 函数是很常用的一个函数,可以用来输出信息。而print(f)是Python 3.6版本以后新增的一种格式化输出方式,也被称为f-string。

在Python中,print(f'') 是格式化字符串(f-string)的语法,它允许你在字符串中嵌入表达式,这些表达式在运行时会被其值所替换。f 或 F 前缀表示这是一个格式化字符串字面量。

在 f’’ 或 F’’ 中的大括号 {} 内,你可以放入任何有效的Python表达式。当 print 函数执行时,这些表达式会被求值,并且其结果会被插入到字符串的相应位置。

想要了解更多则参考官方文档

一、f-string 是什么?

在Python 3.6版本中,新增加一个格式化字符串输出(f-string),即字符串前面加上字母f。使用f-string可以将变量值插入到字符串中,且表达式语法明显、直观。

二、f-string 的基本用法

f-string的基本格式是:

f'string {expression} string'

其中:花括号内是表达式,表达式的值会被插入到字符串中。

下面是一个简单的例子:

name = "Alice"
print(f"Hello, {name}!") # 输出:Hello, Alice!

x = 5
y = 10
print(f"The sum of {x} and {y} is {x + y}.") # 输出:The sum of 5 and 10 is 15.

在上面的例子中,用花括号把变量括起来,然后在花括号前面加上字母f。这样,在字符串中用{}引用变量的时候,就会自动将变量解析出来。

三种格式化字符串方式的比较

name = 'tom'
age = '18'
# 方法一:
print(f'我是{name},今年{age}岁。')
# 方法二:
print('我是{},今年{}岁。'.format(name, age))
# 方法三:
print('我是%s,今年%s岁' % (name, age))

三、基本使用示例

例子 1:基本用法

name = "Alice"
print(f"Hello, {name}!") # 输出:Hello, Alice!

例子 2:算术运算

x = 5
y = 10
print(f"The sum of {x} and {y} is {x + y}.") # 输出:The sum of 5 and 10 is 15.

例子 3:访问字典元素

person = {"name": "Bob", "age": 30}
print(f"{person['name']} is {person['age']} years old.") # 输出:Bob is 30 years old.

例子 4:使用函数

def square(x):
        return x ** 2

number = 4
print(f"The square of {number} is {square(number)}.") # 输出:The square of 4 is 16.

例子 5:格式化数字(一般可以用于保留浮点数的小数点后几位。)

pi = 3.141592653589793
print(f"The value of pi is approximately {pi:.2f}.") # 输出:The value of pi is approximately 3.14.

在上面的最后一个例子中,:.2f 是一个格式说明符,它告诉Python将浮点数 pi 格式化为带有两位小数的字符串。

四、f-string 的高级用法

4.1、对齐

f-string 的 {} 中采用 content:format 的方式来设置字符串格式,如要使用默认格式,则可不必指定 :format。支持左对齐、右对齐、居中对齐。

如果你希望将变量打印在特定位置,可以使用对齐方式

4.1.1、默认使用空格填充

name = 'ready'
print(f'|{name:>20}|')  # 右对齐,填充字符串长度至20
# |               ready|
print(f'{name:<20}')  # 左对齐,填充字符串长度至20
# |ready               |
print(f'{name:^20}')  # 居中对齐,填充字符串长度至20
# |        ready       |

注意第一个 print 中的number:n。这里的n表示从“|” 开始打印变量number的宽度(包括数字本身的宽度),还可以选择进行左对齐、居中对齐或右对齐。

在name:>20中,打印结果共占用 20 字符,字符串靠右打印,左侧填充空格。

在name:^20中,打印结果共占用 20 字符,且字符串位于中间。

4.1.2、使用其他字符填充

name = 'ready'
print(f'{name:a>20}')
# aaaaaaaaaaaaaaaready
print(f'{name:1<20}')
# ready111111111111111
print(f'{name:-^20}')
# --------ready-------

4.2、调试模式

f-string 的调试模式,即使用 {variable = } 代替 variable = {},如下面代码所示。

在 f-string 的调试中,还可以执行数学运算,就像在下面示例中看到的那样。

x = 10
y = 20
 
print(f"x = {x}, y = {y}") # 原方式
# x = 10, y = 20

print(f"{x = }, {y = }")   # 调试模式
# x = 10, y = 20

# 运算x*y的值
print(f"{x * y = }")
# x * y = 200

print(f"{x = :.3f}")
# x = 10.000

可以看到使用调试模式减少了代码量,同时输出的内容是一致的。

此功能称为“调试”,可以与其他修饰符结合使用。它还保留空格,因此f"{x = }“和f”{x=}"将产生不同的字符串。

4.3、变量名格式化

有时候,我们需要在字符串中使用变量名,而不是变量的值,这时可以使用!r!s

比如下面这个例子:

name = "Tom" 
print(f"His name is {name!r}.") #输出:His name is'Tom'

在上面的例子中,变量name的值是Tom,但是使用了!r后,输出的是’Tom’,即字符串类型的值

4.4、表达式格式化

f-string 支持在花括号中使用表达式,从而处理一些复杂的逻辑。

比如下面这个例子:

name ="Tom"
age=20 
print(f"{'He' if age<18 else 'She'} is {name}.")#输出:She is Tom.

在上面的例子中,使用if语句实现了根据年龄性别的判断输出。

4.5、格式化数字

可以用数字进行各种格式化/转换,下面是一些示例:

  • 设置小数位数(精度):使用:.nf,其中n是小数位数
  • 十六进制转换
  • 二进制转换
  • 八进制转换
  • 科学计数法
  • 使用前导零填充数字:使用:0n,其中n是总字符数
number = 420
 
# decimal places
# 设置精度
print(f"number: {number:.2f}")
 
# hex conversion
# 十六进制转换
print(f"hex: {number:#0x}")
 
# binary conversion
# 二进制转换
print(f"binary: {number:b}")
 
# octal conversion
# 八进制转换
print(f"octal: {number:o}")
 
# scientific notation
# 科学计数法
print(f"scientific: {number:e}") 
 
# total number of characters
# 填充前导0
print(f"Number: {number:09}")

输出

number: 420.00
hex: 0x1a4
binary: 110100100
octal: 644
scientific: 4.200000e+02
Number: 000000420

类型转换标志符还有:d 整数、f 浮点数、g 根据值的大小选择%f或%e、s 字符串

千位符分隔符、百分比

a = 1000000 
print(f"{a= :,}") 
# a= 1,000,000

per = 0.59596
print(f"{per = :.2%}")
# per = 59.60%

:.2% 告诉 Python 设置 2 位小数并在字符串末尾添加一个百分号。

4.6、日期格式化

如果想格式化日期,可以创建一个示例日期时间值。就像在应用程序中格式化日期一样,可以在 f-string 中定义你想要的格式,例如:<date_format>

下面将一个 UTC 日期时间格式化为:

  • 没有微秒
  • 仅日期
  • 仅时间
  • 带上午/下午的时间
  • 24 小时格式
import datetime

today = datetime.datetime.utcnow()
print(f"datetime : {today}")
# datetime : 2024-02-28 06:11:04.848944

print(f"date time: {today:%m/%d/%Y %H:%M:%S}") # 没有微秒
# date time: 02/28/2024 06:11:04

print(f"date: {today:%m/%d/%Y}") # 仅日期
# date: 02/28/2024

print(f"time: {today:%H:%M:%S.%f}") # 仅时间
# time: 06:11:04.848944

print(f"time: {today:%H:%M:%S %p}") # 时间带上上午/下午
# time: 06:11:04 AM

print(f"time: {today:%H:%M}") # 24小时制时间
# time: 06:11

还可以使用格式化选项做更多事情,下面是如何从日期中获取星期几和一年中的第几天,还有计算已经过了一年的多少天。

print(f"locale appropriate: {today:%c}") # 本地的适当日期和时间表示法
# locale appropriate: Wed Feb 28 06:13:35 2024

print(f"weekday: {today:%A}") # 获取当前日期是星期几
# weekday: Wednesday

print(f"day of year: {today:%j}") # 获取当前日期是一年中的第几天
# day of year: 059

day_of_year = f"{today:%j}" 
print(f"progress % year: {int(day_of_year)/365 * 100:.2f}%")# 获取本年度已过去时间(百分比)
# progress % year: 16.16%

4.7、引号规范、转义问题

1、f-string 中 {} 内使用的引号不能与 {} 外的引号定界符冲突,即如下这样的操作是不可以的:

print(f'My name is {'Li Hua'}')
# SyntaxError: f-string: expecting '}'

改为以下任何一种形式都能够正常输出(以下列举了所有可能的情况):

""" 外部定界符是单引号 """
print(f'My name is {"Li Hua"}')
print(f'My name is {"""Li Hua"""}')

""" 外部定界符是双引号 """
print(f"My name is {'Li Hua'}")
print(f"My name is {'''Li Hua'''}")

""" 外部定界符是双三引号 """
print(f"""My name is {'Li Hua'}""")
print(f"""My name is {"Li Hua"}""")
print(f"""My name is {'''Li Hua'''}""")

""" 外部定界符是单三引号 """
print(f'''My name is {'Li Hua'}''')
print(f'''My name is {"Li Hua"}''')
print(f'''My name is {"""Li Hua"""}''')

总结:如果字符串内部可能会出现多种引号但又不想操心引号问题,外部定界符直接使用 """ 就行了。

2、大括号外的引号还可以使用\转义,但大括号内不能使用\转义

print(f'I\'m{"小杨"}') # 输出:I'm小杨
print(f'I\'m{"小杨"},{I\'m OK}')
#输出
'''
print(f'I\'m{"小杨"},{I\'m OK}')
                                     ^
SyntaxError: f-string expression part cannot include a backslash
'''

如果确实需要在 {} 使用转义,则应当将包含 \ 的内容单独声明为一个变量

s = '\''
print(f"{s}")
# '

4.8、f-string中大括号使用存在的问题

f-string大括号外如果需要显示大括号,两个大括号{{ }}就可以显示了;大括号内需要引号,使用引号即可(规则如第7条所述)。

print(f"给大家推荐一本书{{物种起源}}")
#输出:给大家推荐一本书{物种起源}

到此这篇关于python中f-string的基本用法的文章就介绍到这了,更多相关python f-string内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • Python如何读写CSV文件

    Python如何读写CSV文件

    这篇文章主要介绍了Python如何读写CSV文件,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-08-08
  • Python中利用mpld3创建交互式Matplotlib图表的代码示例

    Python中利用mpld3创建交互式Matplotlib图表的代码示例

    mpld3 是一个 Python 库,它将 Matplotlib 图表转换为 D3.js(JavaScript 绘图库)可解释的格式,从而实现了在浏览器中显示并交互的功能,在本文中,我们将介绍如何使用 mpld3 在 Python 中创建交互式 Matplotlib 图表,并提供代码示例,需要的朋友可以参考下
    2024-05-05
  • python 网页解析器掌握第三方 lxml 扩展库与 xpath 的使用方法

    python 网页解析器掌握第三方 lxml 扩展库与 xpath 的使用方法

    这篇文章主要介绍了python 网页解析器掌握第三方 lxml 扩展库与 xpath 的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Python开发的HTTP库requests详解

    Python开发的HTTP库requests详解

    Requests是用Python语言编写,基于urllib,采用Apache2 Licensed开源协议的HTTP库。它比urllib更加方便,可以节约我们大量的工作,完全满足HTTP测试需求。Requests的哲学是以PEP 20 的习语为中心开发的,所以它比urllib更加Pythoner。更重要的一点是它支持Python3哦!
    2017-08-08
  • Python使用XlsxWriter库操作Excel详解

    Python使用XlsxWriter库操作Excel详解

    XlsxWriter 是一个功能强大的 Python 模块,专门用于生成 Microsoft Excel 2007及以上版本的电子表格文件,本文主要为大家介绍了如何使用XlsxWriter库进行Excel基本操作,需要的可以参考下
    2023-11-11
  • 深入理解python中的atexit模块

    深入理解python中的atexit模块

    atexit模块很简单,只定义了一个register函数用于注册程序退出时的回调函数,我们可以在这个回调函数中做一些资源清理的操作。下面这篇文章主要介绍了python中atexit模块的相关资料,需要的朋友可以参考下。
    2017-03-03
  • python库使用Fire库生成命令行参数

    python库使用Fire库生成命令行参数

    Python Fire是一个开源库,能把Python对象转换为命令行界面,Fire库是一个非常有用的工具,它可以帮助开发人员创建命令行界面,并且可以将任何Python对象转换为命令行界面,这篇文章主要介绍了python库使用Fire库生成命令行参数,需要的朋友可以参考下
    2024-02-02
  • Python自省及反射原理实例详解

    Python自省及反射原理实例详解

    这篇文章主要介绍了Python自省及反射原理实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • 浅谈Scrapy网络爬虫框架的工作原理和数据采集

    浅谈Scrapy网络爬虫框架的工作原理和数据采集

    在python爬虫中:requests + selenium 可以解决目前90%的爬虫需求,难道scrapy 是解决剩下的10%的吗?显然不是。scrapy框架是为了让我们的爬虫更强大、更高效。接下来我们一起学习一下它吧。
    2019-02-02
  • Python求出0~100以内的所有素数

    Python求出0~100以内的所有素数

    质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数。下面小编给大家带来了Python求出0~100以内的所有素数实例代码,需要的朋友参考下
    2018-01-01

最新评论