【Python3】f-string——since python3.6



        f-string,亦称为格式化字符串常量(formatted string literals),是Python3.6新引入的一种字符串格式化方法,主要目的是使格式化字符串的操作更加简便。f-string在形式上是以 f 或 F 修饰符引领的字符串(f’xxx’F’xxx’),以大括号{}标明被替换的字段。f-string在本质上并不是字符串常量,而是一个在运行时运算求值的表达式。
        f-string在功能方面不逊于传统的%-formatting语句和str.format()函数,同时性能又优于二者,且使用起来也更加简洁明了,因此对于Python3.6及以后的版本,推荐使用f-string进行字符串格式化。

1. 基本用法

        f-string是字符串前加“f”或者“F”,然后字符串内“{}”就有特殊意义了,里面填写变量名,运行时自动计算这个变量的值,代入字符串内输出。
        反正一句话,不涉及格式化问题,就是在f-string中的大括号填写一句可执行的Python语句,运行时把它执行得到的值,替换这一个“{}”块。

name = "sky"
age = 18
print(f"My name is {name}, age is {age}.")
# 输出:My name is sky, age is 18.

fruits = {"apple":"red","banana":"yellow"}
s = F"The apple is {fruits['apple']},the banana is {fruits['banana']}"	
# f-string内的引号和整体的外部引号不能一致,否则会解析错误
print(s)
# 输出:The apple is red,the banana is yellow

s = "I love U"
print(f"the reverse is '{s[::-1]}'")
# 输出:the reverse is 'U evol I'
# 逆置还可以:"".join(reversed(s))

2. f-string的一些细节

2.1 引号

        有时候在大括号内写表达式的时候回用到引号,但是,大括号本身就是在f-string的引号内,如果是同样的引号的话,显然会造成解析错误的,所以应当注意,内部引号和边界引号一定不能相同,这样就能正常运行。

2.2 大括号

        f-string中,大括号是有特殊含义的,它包裹的是可执行的语句,但是如果我们需要用到大括号怎么办呢?我们参照下面的例子:

print(f"the set is {{1}}")					# 'the set is {1}'
print(f"{{{6}}}")							# '{6}',这里表达式是整数6
print(f"{{{{6}}}}")							# '{{6}}',这里表达式是集合{6}

2.3 反斜杠

        这就涉及到转义的问题。在大括号外面仍然可以用反斜杠进行转义,大括号内部不允许出现反斜杠!若一定要用则应该把它赋值给变量,再通过变量传到大括号内。

2.4 多行f-string

s = f"ADC" \
    f"SUP"
r = f"""red
    blue"""

        显然,三引号写法不必每行前加f/F标识f-string

3. 格式化

        f-string采用 {content:format} 设置字符串格式,其中 content 是替换并填入字符串的内容,可以是变量、表达式或函数等,format 是格式描述符。采用默认格式时不必指定 {:format},如上面例子所示只写 {content} 即可。
        语法:{[content]:[填充字符][对齐][符号位][前缀][最小宽度][千位分隔符][.精度][类型]}

3.1 类型

符号示例结果含义
df"age = ({26:4d})"‘age = ( 26)’整数
f f"{3.1415:.2f}"‘3.14’浮点数
F f"{math.nan:F}" ‘NAN’inf,nan等转换为大写
% f"{0.024937:.2%}" ‘2.49%’百分比格式
E/e f"{314.15:.2e}"‘3.14e+02’科学计数法
sf"age = ({‘26’:4s})" ‘age = (26 )’字符串
b f"{36:b}" ‘100100’二进制整数
of"{36:o}"‘44’八进制整数
X/x f"{36:x}" ‘24’十六进制整数

3.2 对齐与填充

符号含义
^居中
<左对齐
>右对齐

        对齐符号左边是填充字符,注意:只能是一个字符!不写默认是空格填充
        有填充字符必须有对齐符号,不然中间丢失对其符号会报错!
        默认,字符串左对齐,数值右对齐

3.3 符号位和前缀:针对数值,用于字符串会报错

符号含义
+显示正负号
-负数显示负号,正数不显示
空格整数显示空格,负数显示负号
#仅用于显示前缀,如八进制、十六进制整数

3.4 最小宽度

        格式化后,该段格式化后整体的最小长度,不足长度会填充填充字符,如果替换的内容长度超过设定的最小长度,以实际长度为准。

3.5 精度

        作用于字符串时,是输出字符串的个数,作用于整数时报错,作用于浮点数时,表示输出小数位数,科学计数法表示的是底数的小数位数,默认6位小数。
        目前试验看来是四舍五入。

3.6 千位分隔符

        逗号或下划线,只作用于数值

>>> f"{1234356789.123456:^#20_.4f}"
' 1_234_356_789.1235 '
>>> f"{1234356789.123456:^#20,.4f}"
' 1,234,356,789.1235 

4. 日期时间的格式化

4.1 格式化符号

        格式字符太多,以下给出经常用得到的格式字符表示:

符号含义示例
%y两位数的年份表示99
%Y四位数的年份表示2019
%m月份12
%d一个月的第几天31
%F返回年月日(-连接)2019-05-22
%D返回日月年(/连接)05/22/19
%b本地简化月份名称Aug
%B本地完整月份名称August
%a本地简化星期名称Mon
%A本地完整星期时间Monday
%j一年中的第几天001-366
%p本地a.m.和p.m.AM/PM
%H24小时制23
%I12小时制05
%M分钟,补足2位09
%S秒,补足2位59
%f微秒,补足6位553777
%x本地相应的日期表示08/15/20
%X本地相应的时间表示00:00:00
%%百分号%

4.2 examples

import datetime
d = datetime.datetime.now()

s = f"{d:%Y-%m-%d %A %p %H:%M:%S.%f}"
print(s)										# 2019-05-22 Wednesday PM 17:13:18.393931

s = f"{d:%F}"
print(s)										# 2019-05-22
s = f"{d:%D}"
print(s)										# 05/22/19

s = f"{d:%d %b %Y}"
print(s)										# 22 May 2019

s = f"{d:%X}"
print(s)										# 17:15:47

5. 使用lambda表达式

        f-string大括号内也可填入lambda表达式,但lambda表达式的 : 会被f-string误认为是表达式与格式描述符之间的分隔符,为避免歧义,需要将lambda表达式置于括号()内:

l = [1,2,3,4,5]
s = f"求列表每个数的平方:{(lambda x: [y*y for y in x])(l)}"
print(s)	# 求列表每个数的平方:[1, 4, 9, 16, 25]

6. f-string与对象

        _str __()__repr __()方法处理对象如何呈现为字符串,因此您需要确保在类定义中包含至少一个这些方法。如果必须选择一个,请使用__repr __(),因为它可以代替__str __()。
        __str __()返回的字符串是对象的非正式字符串表示,应该可读。__repr __()返回的字符串是官方表示,应该是明确的。调用str()repr()比直接使用__str __()__repr __()更好。
        默认情况下,f字符串将使用__str __()方法,但如果包含转换标志!r,则可以确保它们使用__repr __()方法。

class Person(object):
    def __init__(self,name,age):
        self.__name = name
        self.__age = age
    def __str__(self):
        return f"我的名字是 {self.__name} ,今年 {self.__age} 岁了!"
    def __repr__(self):
        return f"我的名字是 {self.__name} ,今年 {self.__age} 岁了! Superise!"

p = Person("易",18)
print(f"{p}")							# 我的名字是 易 ,今年 18 岁了!
print(f"{p!r}")							# 我的名字是 易 ,今年 18 岁了! Superise!
  • 9
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: f-stringPython3.6及更高版本中引入的一种字符串格式化方法。除了基本的变量插入外,f-string还支持一些高级的用法。 首先,f-string支持表达式的内嵌计算。我们可以在花括号内使用任何有效的Python表达式,例如函数调用、数学运算等。这样我们可以直接在格式化字符串中执行计算,避免了额外的步骤。 其次,f-string还支持设定字段的宽度和对齐方式。可以在花括号中使用冒号(:)来进行格式设置。可以指定字段的宽度以及对齐方式(左对齐:<,右对齐:>,居中对齐:^),方便美化输出格式。 另外,f-string还可以在花括号内使用格式化说明符。格式化说明符可以用来指定数值的显示格式,如小数位数、千位分隔符等。通过在冒号后加上格式化指令,可以实现更加灵活的数值格式化。 此外,f-string还支持特殊字符的转义。在花括号内使用双花括号({{}})表示打印花括号字符本身,避免被解析为变量插入。 总的来说,f-string提供了一种简洁而强大的字符串格式化方式。它可以方便地嵌入变量和表达式,支持字段宽度和对齐方式的设置,允许使用格式化说明符进行数值格式化,并支持特殊字符的转义。这些高级用法使得f-string在日常编程中能够更好地满足我们对字符串格式化的需求。 ### 回答2: Python 3 中的 f-string 是一种方便的字符串格式化方法,在格式化字符串时具有一些高级用法。 首先,可以在 f-string 中使用表达式。除了简单的变量名外,还可以在大括号中使用任何有效的表达式,例如数学运算、函数调用等。这样可以灵活地对字符串进行计算或处理。 其次,可以在 f-string 中使用属性和方法。如果大括号中的表达式是一个对象的属性或方法调用,f-string 将自动获取或调用它们的值。这使得处理对象属性和方法时更加方便。 此外,可以在 f-string 中使用格式化选项。通过在大括号中使用冒号:,可以指定格式化选项。例如,可以设置宽度、精度、填充字符等等。这样可以方便地控制输出的格式。 另外,可以在 f-string 中使用字典和列表。通过使用花括号 {} 和索引或键名,可以方便地获取字典和列表中的元素,并进行格式化输出。 最后,可以在 f-string 中使用循环和条件语句。通过在大括号中使用循环和条件表达式,可以根据需要多次输出字符串或进行条件判断,并灵活地处理输出结果。 综上所述,Python 3 的 f-string 提供了一种高级的字符串格式化方法,不仅可以进行简单的变量替换,还可以使用表达式、属性和方法、格式化选项、字典和列表、循环和条件语句等高级功能。这些特性使得 f-string 成为一种非常方便和灵活的字符串格式化工具。 ### 回答3: Python3中的f-string是一种方便且直观的格式化字符串的方式。除了基本的字符串插值功能外,它还有一些高级用法,可以更灵活地处理字符串的格式化需求。 一、格式化变量: f-string可以直接在字符串中插入变量,并使用大括号{}将变量包裹起来。可以在大括号内使用简单表达式对变量进行格式化。例如: name = 'Alice' age = 20 print(f'My name is {name} and my age is {age}.') # 输出:My name is Alice and my age is 20. 二、格式化数字: f-string支持在大括号内使用格式化选项,对数字进行格式化。例如: num = 3.1415926 print(f'The value of pi is approximately {num:.2f}.') # 输出:The value of pi is approximately 3.14. 三、调用函数: f-string中可以直接调用函数,并将函数的返回值插入到字符串中。例如: def get_greeting(): return 'Hello' print(f'{get_greeting()} World!') # 输出:Hello World! 四、使用表达式: f-string支持在大括号内使用复杂的表达式,可以对变量进行运算、取长度等操作。例如: name = 'Alice' print(f'My name is {name.upper()} and my name has {len(name)} characters.') # 输出:My name is ALICE and my name has 5 characters. 总结: Python3的f-string是一种强大的字符串格式化工具,它不仅可以简洁地插入变量,还支持格式化数字、调用函数和使用表达式。它的高级用法可以满足更复杂的字符串格式化需求,提高开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值