1、引言
f-string,想必很多python的码农都很熟悉…
小屌丝:鱼哥,如果我没记错,这是python3.6版本以后引入的
小鱼:对的,没错,你的头发虽然不多,但是你的记忆力却没减~ ~
小屌丝:你是夺笋!!! 专攻人家软肋…
小鱼:我这都是嘴下留情了…不然你那点事,我都给抖出来!!
小屌丝:… 为了不让我们友谊的小船倾斜,能不能share点硬货??
小鱼:多硬? 螺丝钉硬还是砖头硬??
小屌丝:鱼哥,我发现你是真狗啊…如果不是为了小妹,我就不回答你的问题了…
小鱼:难怪难怪… 好吧,为了能让你的小迷妹对你更加认可,我今天就分享一点99%的撸码人不知道的f-string隐藏技巧;
小屌丝:唉我去~~ 鱼哥,我发现你对我是真爱!!!
小鱼:有多远走多远, 别扯没用的,我们开始今天的分享。
2、f-string
2.1 基础用法介绍
基础用法很简单,一句话:
前缀f的字符串中向{}内直接填入要嵌入的值、变量或计算表达式。
举例:
实例一
f'1 + 1 = {2}'
结果
'1 + 1 = 2'
实例二
a = 1 + 1 f'1 + 1 = {a}'
结果
'1 + 1 = 2'
实例三
f'1 + 1 = {1 + 1}'
结果
'1 + 1 = 2'
2.2 控制浮点数精度
我们可以按照以下方式灵活的控制浮点数的小数位数:
举例
# -*- coding:utf-8 -*- # @Time : 2021-08-01 # @Author : carl_DJ import math #获取π pi = math.pi #输出π print(f'输出π:{pi}') #截取π的小数点后2位并输出 print(f'输出π小数点后2位:{pi:.2f}') #截取π的小数点后9位并输出 print(f'输出π小数点后9位:{pi:.9f}')
输出π:3.141592653589793 输出π小数点后2位:3.142 输出π小数点后9位:3.141592654
2.3 设置科学计算法格式
也是很简单,直接上例子,我们来瞅瞅:
# -*- coding:utf-8 -*- # @Time : 2021-08-01 # @Author : carl_DJ import math #获取π pi = math.pi #pix100后以科学计算法输出 print(f'输出πx100后科学计算法显示:{pi*100:.10e}')
结果
输出πx100后科学计算法显示:3.1415926536e+02
2.4 自记录表达式
从python3.8开始,f-string就引入了自记录表达式,
好处:快速的输出计算表达式。
举例:
# -*- coding:utf-8 -*- # @Time : 2021-08-01 # @Author : carl_DJ import math a = 8 #输出math.log(a)的值 print(f'math.log(a) = {math.log(a)}')
结果
math.log(a) = 2.0794415416798357
2.5 多行 f-string
f-string不仅仅只能编写单行代码,多行的也一样可行。
举例
# -*- coding:utf-8 -*- # @Time : 2021-08-01 # @Author : carl_DJ a = 1 b = 2 c = 3 #f-string 编写多行,需要使用() result = (f'a = {a } \n' f'b = {b} \n' f'c = {c} \n' ) print(f'result输出结果是:\n{result}')
结果
result输出结果是: a = 1 b = 2 c = 3
2.6 在f-string格式化日期
针对日期类型的变量,同样可以在f-string中快速的进行格式化。
举例
# -*- coding:utf-8 -*- # @Time : 2021-08-02 # @Author : carl_DJ import datetime #设定当前日期时间 now = datetime.datetime.now() #输出日期时间 print(f'当前输出日期时间是:{now:%Y-%m-%d %H:%M:%S}'))
结果:
当前输出日期时间是:2021-08-02 12:24:36
2.7 控制有效数字位数
在实际项目中,我们只想显示有效的数字位数,那怎么做呢,我们来看下:
实例一
我们想显示从左往右第一个不为0的12位数字:
a = 123.4567890123456 print(f'从左往右剔除第一个为0的12个数字 :{a:.12g}')
结果
从左往右刨除第一个为0的10个数字 :123.456789012
实例二
同样显示10个数字,当位数小于整数部分时,自动变成科学计数法
a = 12345678.90123456 print(f'从左往右刨除第一个为0的5个数字 :{a:.5g}')
结果
从左往右刨除第一个为0的5个数字 :1.2346e+07
2.8 修改为左对齐
f-string默认为右对齐,但是有的大佬就不走寻常路(有可能喜欢喝勇闯天涯),必须要左对齐,那也是可以实现的。
使用来"<"修改显示模式为左对齐。
# -*- coding:utf-8 -*- # @Time : 2021-08-02 # @Author : carl_DJ #写一个循环 for j in range(1,11): #修改显示模式为左对齐 print(f'{j:<2}|{j**3:<4}|{j**6:<7}') #默认显示为右对齐 print(f'{j:2}|{j**3:4}|{j**6:7}')
结果
①左对齐
1 |1 |1 2 |8 |64 3 |27 |729 4 |64 |4096 5 |125 |15625 6 |216 |46656 7 |343 |117649 8 |512 |262144 9 |729 |531441 10|1000|1000000
②右对齐
1| 1| 1 2| 8| 32 3| 27| 243 4| 64| 1024 5| 125| 3125 6| 216| 7776 7| 343| 16807 8| 512| 32768 9| 729| 59049 10|1000|100000
2.9 标准化显示宽度
上面的实例,满足了左对齐,右对齐,显示数字截取,那么
我们能不能对输出的结果中显示的宽度做调整呢?
当然也是可以的。
同样用上面的左对齐的例子,
# -*- coding:utf-8 -*- # @Time : 2021-08-02 # @Author : carl_DJ #写一个循环 for j in range(1,11): #第一列都占两个字符 print(f'{j:02}|{j**3:4}|{j**5:6}') #第二列都占用4个字符,第三列都占用6个字符 print(f'{j:02}|{j**3:0004}|{j**5:00006}')
结果
第一列占用2个字符
01| 1| 1 02| 8| 32 03| 27| 243 04| 64| 1024 05| 125| 3125 06| 216| 7776 07| 343| 16807 08| 512| 32768 09| 729| 59049 10|1000|100000
第一列占用2个,第二列4个,第三列6个
01|0001|000001 02|0008|000032 03|0027|000243 04|0064|001024 05|0125|003125 06|0216|007776 07|0343|016807 08|0512|032768 09|0729|059049 10|1000|100000
3、总结
看到这里,今天的分享内容,似乎又到一段落了。
总的来说,这些隐藏的技巧,只是大家平时没有太多的关注,
其实只要稍稍的多花费一点点时间,可能小鱼也不能说99%的人不知道呢。
小屌丝:看到这里,我又可以跟我的小学妹嘚瑟一番了。
小鱼:哎~~ 你嘚瑟你的,我吃我的饭去了。