Python F-Strings怎么使用
日期和时间格式
使用 f 字符串应用数字格式非常常见,但你知道你还可以格式化日期和时间戳字符串吗?
importdatetime today=datetime.datetime.today() print(f"{ today:%Y-%m-%d} ") #2023-02-03 print(f"{ today:%Y} ") #2023
f-strings 可以像使用datetime.strftime方法一样格式化日期和时间。当你意识到除了文档中提到的几种格式之外还有更多格式时,这非常好。Python strftime还支持底层 C 实现支持的所有格式,这可能因平台而异,这就是文档中未提及的原因。话虽如此,你仍然可以利用这些格式并使用例如%F,它等效于%Y-%m-%d或%T等效于%H:%M:%S,还值得一提的是%x和%X分别是语言环境首选的日期和时间格式。这些格式的使用显然不限于 f 字符串。
变量名和调试
f-string 功能(从 Python 3.8 开始)最近新增的功能之一是能够打印变量名称和值:
x=10 y=25 print(f"x={ x} ,y={ y} ") #x=10,y=25 print(f"{ x=} ,{ y=} ")#Better!(3.8+) #x=10,y=25 print(f"{ x=:.3f} ") #x=10.000
此功能称为“调试”,可以与其他修饰符结合使用。它还保留空格,因此f"{ x = } "和f"{ x=} "将产生不同的字符串。
字符串表示
打印类实例时,__str__默认使用类的方法来表示字符串。但是,如果我们想强制使用__repr__,我们可以使用!r转换标志:
classUser: def__init__(self,first_name,last_name): self.first_name=first_name self.last_name=last_name def__str__(self): returnf"{ self.first_name} { self.last_name} " def__repr__(self): returnf"User'snameis:{ self.first_name} { self.last_name} " user=User("John","Doe") print(f"{ user} ") #JohnDoe print(f"{ user!r} ") #User'snameis:JohnDoe
我们也可以只repr(some_var)在 f 字符串内部调用,但使用转换标志是一个很好的习惯和简洁的解决方案。
f-strings杰出的性能表现
强大的功能和语法糖通常会带来性能损失,但对于 f 字符串而言情况并非如此:
#python-mtimeit-s'x,y="Hello","World"''f"{ x} { y} "' fromstringimportTemplate x,y="Hello","World" print(f"{ x} { y} ")#39.6nsecperloop-Fast! print(x+""+y)#43.5nsecperloop print("".join((x,y)))#58.1nsecperloop print("%s%s"%(x,y))#103nsecperloop print("{ } { } ".format(x,y))#141nsecperloop print(Template("$x$y").substitute(x=x,y=y))#1.24usecperloop-Slow!
上面的示例使用timeit如下模块进行了测试:python -m timeit -s 'x, y = "Hello", "World"' 'f"{ x} { y} "'正如你所看到的,f 字符串实际上是 Python 提供的所有格式化选项中最快的。因此,即使你更喜欢使用一些较旧的格式化选项,你也可以考虑切换到 f-strings 只是为了提高性能。
格式化规范的全部功能
F-strings 支持 Python 的Format Specification Mini-Language,所以你可以在它们的修饰符中嵌入很多格式化操作:
text="helloworld" #Centertext: print(f"{ text:^15} ") #'helloworld' number=1234567890 #Setseparator print(f"{ number:,} ") #1,234,567,890 number=123 #Addleadingzeros print(f"{ number:08} ") #00000123
Python 的Format Specification Mini-Language不仅仅包括格式化数字和日期的选项。它允许我们对齐或居中文本、添加前导零/空格、设置千位分隔符等等。所有这些显然不仅适用于 f 字符串,而且适用于所有其他格式设置选项。
嵌套 f-strings
如果基本的 f-strings 不足以满足你的格式化需求,你甚至可以将它们相互嵌套:
number=254.3463 print(f"{ f'${ number:.3f} ':> 10s} ") #'$254.346'
你可以将 f-strings 嵌入 f-strings 中以解决棘手的格式化问题,例如将美元符号添加到右对齐的浮点数,如上所示。
如果你需要在格式说明符部分使用变量,也可以使用嵌套的 f 字符串。这也可以使 f 字符串更具可读性:
importdecimal width=8 precision=3 value=decimal.Decimal("42.12345") print(f"output:{ value:{ width} .{ precision} } ") #'output:42.1'
条件格式
在上面带有嵌套 f 字符串的示例之上,我们可以更进一步,在内部 f 字符串中使用三元条件运算符:
importdecimal value=decimal.Decimal("42.12345") print(f'Result:{ value:{ "4.3"ifvalue100else"8.3"} } ') #Result:42.1 value=decimal.Decimal("142.12345") print(f'Result:{ value:{ "4.2"ifvalue100else"8.3"} } ') #Result:142
lambda表达式
如果你想突破 f-strings 的限制,同时让阅读你代码的人觉得你很牛逼,那么你可以使用 lambdas
print(f"{ (lambdax:x**2)(3)} ") #9
在这种情况下,lambda 表达式周围的括号是强制性的,因为:否则将由 f 字符串解释。
到此,相信大家对“Python F-Strings怎么使用”有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Python F-Strings怎么使用
本文地址: https://pptw.com/jishu/7749.html