专栏首页python3【Python3】f-string——s

【Python3】f-string——s

文章目录

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 类型

符号

示例

结果

含义

d

f"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’

科学计数法

s

f"age = ({‘26’:4s})"

‘age = (26 )’

字符串

b

f"{36:b}"

‘100100’

二进制整数

o

f"{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

%H

24小时制

23

%I

12小时制

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!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python Str类方法

    py3study
  • python学习之字符串转换

    py3study
  • Python条件语句与循环

    1、判断与循环 python 缩进 main: print("Hello") print("Hello world.")

    py3study
  • 带你认识优秀的python代码

    有一串长的字符串names = "LI XIA , ZHAO MING ,LAO WANG *,DA XIONG >,LI MEI MEI, CHANG JIA...

    stormwen
  • python注释-输入输出-基本数据类型-运算符

          python 2.x 中,input 获取到的数据是什么类型,传给变量的就是什么类型

    suwanbin
  • 【必读】腾讯企点销售智推上手指南

    ? 企点营销-销售智推 社交场景的销售客户管理工具 筛选消费者需要的精准信息及内容为销售赋能 01 使用前授权准备 ①开通小程序 企业必须申请一个已认证的小...

    腾讯企点
  • python 字符串

    在 python变量 文章中我们对python变量做了一个简单的了解,整数/浮点数/bool值相对来讲都比较简单,今天详细在讲解一下关于字符串的内容,字符串俗称...

    猿说编程[Python和C]
  • 基础学习python(4)

    adventureisoutthere
  • 电商,抖音蓄谋已久

    这次入局电商,抖音一改之前单纯引流的老套路,以短视频“直播+电商”的模式,在电商领域和淘宝、京东等平台展开竞争。

    刘旷
  • 轻松学Pytorch – 年龄与性别预测

    大家好,上周太忙,没有更新Pytorch轻松学系列文章,但是我还是会坚定的继续走下去的,所谓有始有终,这个系列我会一直坚持写下去,希望大家继续支持我,积极给我反...

    OpenCV学堂

扫码关注云+社区

领取腾讯云代金券