今天看个代码,给我整不会了。
试了半天,终于大概知道是啥意思了。浅记录一下。这是个挺基础的知识点,主要是记录思考过程。
原始问题是:
如何打印一个包含时间递增的列表:如:
['00:00', '00:01', '00:02', '00:03', '00:04', '00:05'.................'23:55', '23:56', '23:57', '23:58', '23:59']
有人给出了答案:
re_list = []
# 分钟间隔
time_step = 1
for i in range(0, 24, 1):
for j in range(0, 60, time_step):
time_str = f'{i:0>2}:{j:0>2}' # 0>2是啥意思?
re_list.append(time_str)
print(time_str)
print(re_list)
其中这句话没看懂
f-string 这个玩意儿我倒是知道,也经常用。但是这个0>2就不明白了,也不像是三元表达式啊?
先去百度搜一搜看看。好像没找到(关键是不知道该搜什么好,关键词搜不对就挺难找到正确答案的)
那就自己试试吧。
a =1 # 先定义一个变量
print(f'{a:0>2}:{a:0>2}') # 再按上边的格式打印一下看看效果
打出来的效果是01:01
猜想步骤:
1、先看看哪几个能改,改一下运行看看结果再说。
f’{a:0>2}:{a:0>2}'中
a、0、>、2这四个都能改,随便改改试试:
把0换成x,可以打印。如下:
把0换成6,也可以打印,如下
那么,盲猜一下,好像跟补齐相关。
如果是补齐,那么参与补齐的字符应该是哪个?大概率是0,因为01:01、x1:x1、61:61中,并没有出现源代码里边的2的字样。
以上,说明这东西大概是补齐对齐的意思,并且源码里的0,应该是用于补齐的字符。
2、如果用于补齐的字符是0,那2是什么意思?—继续试验。把2改成3看看效果
如下:
打印输出内容,居然变成了001,那这个2大概率就是位数。也就是控制补全到多少位的那个东西。
为了证明猜想,再试一组:把2换成字符串。
如下,报错了。
因为对于补全,我们一般都会说:最少10位,不足的用0补全。
而不会说:最少a位,不足的用0补全。
以上,说明猜想基本2正确,2应该就是那个用于控制补全到多少位的那个东西。
3、那这个大于号(>)是什么意思?—继续试验。
大于号的作用就呼之欲出了,大概率是控制左补全还是右补全的
如下:
把大括号改成小于号,打印输出就变成了10000
贴个对比图:
以上,说明猜想基本3正确,>应该就是控制补全方向的。
综上推断,语法应该是:
f"{object:str:int}" # 官方文档太多了,没找到。等找到了再补上官网的语法
object:要被补全的内容。可以是数字、字符串(其他的列表、元组、集合、字典都不行)
str:用什么来补全。可以是数字、字符串(其他的列表、元组、集合、字典都不行)
int:补全多少位(注意,这个是加上原始内容之后补全的位数,是object+str合起来的位数)。只能是整数,不能是小数(这里有点好玩,我试了下负数,居然结果一样)
多说一句:居然还有^这个符号,代表居中。
参考资料:
Python格式化字符串f-string概览