试图理解一些 f-string 魔法(在 f-strings 中格式化迷你语言)
Trying to understand some f-string magic (formatting mini language in f-strings)
在 的评论中,有人删除了这行代码:
print("\n".join(f'{a:{a}<{a}}' for a in range(1,10)))
1
22
333
4444
55555
666666
7777777
88888888
999999999
这对我来说就像魔法一样,有人可以向我解释为什么它有效吗(更具体地说 f'{a:{a}<{a}}'
)。
如果你替换一些东西,你可以消除输出的雾气:
print("\n".join(f'{a:4<5}' for a in range(1,10)))
并继续阅读 String format mini language:
它使用 4
作为填充符将 a
的值左对齐 5 个空格:
14444
24444
34444
44444
54444
64444
74444
84444
94444
玩弄代码是了解其功能的好方法...
如果您将迭代可视化,这将非常简单:
1 # f'{1:1<1}', means start with 1, left align with 1 spaces filled with 1
22 # f'{2:2<2}', means start with 2, left align with 2 spaces filled with 2
333 # f'{3:3<3}', means start with 3, left align with 3 spaces filled with 3
4444 # f'{4:4<4}', means start with 4, left align with 4 spaces filled with 4
55555 # f'{5:5<5}', means start with 5, left align with 5 spaces filled with 5
666666 # f'{6:6<6}', means start with 6, left align with 6 spaces filled with 6
7777777 # f'{7:7<7}', means start with 7, left align with 7 spaces filled with 7
88888888 # f'{8:8<8}', means start with 8, left align with 8 spaces filled with 8
999999999 # f'{9:9<9}', means start with 9, left align with 9 spaces filled with 9
您已经知道 f 字符串 f'{a:{a}<{a}'
的作用 - 当在字符串中给出 {object}
时,它将替换为所述对象。在这种情况下,a
的范围是 1 到 9。
那么您只需要了解 {9:9<9}
的作用即可。这是一个字符串格式化程序,如 the documentation 答案已提供:
'<'
Forces the field to be left-aligned within the available space (this is the default for most objects).
x<y
部分表示将文本左对齐,宽度为 y
spaces。对于任何未使用的 space,用字符 x
填充它。所以你以 {9}
作为第一个字符开始,对于其余 8 个未使用的 space,用 {9}
填充它。这就是 {9:9<9}
所做的。
然后你应用相同的逻辑,看看每次迭代是如何发生的。
更重要的是,需要注意的是,"magic"这种感觉往往只是缺乏理解。一旦你花时间消化和理解这个过程,它就会变得非常幻灭,你就会开悟。
在
print("\n".join(f'{a:{a}<{a}}' for a in range(1,10)))
1
22
333
4444
55555
666666
7777777
88888888
999999999
这对我来说就像魔法一样,有人可以向我解释为什么它有效吗(更具体地说 f'{a:{a}<{a}}'
)。
如果你替换一些东西,你可以消除输出的雾气:
print("\n".join(f'{a:4<5}' for a in range(1,10)))
并继续阅读 String format mini language:
它使用 4
作为填充符将 a
的值左对齐 5 个空格:
14444
24444
34444
44444
54444
64444
74444
84444
94444
玩弄代码是了解其功能的好方法...
如果您将迭代可视化,这将非常简单:
1 # f'{1:1<1}', means start with 1, left align with 1 spaces filled with 1
22 # f'{2:2<2}', means start with 2, left align with 2 spaces filled with 2
333 # f'{3:3<3}', means start with 3, left align with 3 spaces filled with 3
4444 # f'{4:4<4}', means start with 4, left align with 4 spaces filled with 4
55555 # f'{5:5<5}', means start with 5, left align with 5 spaces filled with 5
666666 # f'{6:6<6}', means start with 6, left align with 6 spaces filled with 6
7777777 # f'{7:7<7}', means start with 7, left align with 7 spaces filled with 7
88888888 # f'{8:8<8}', means start with 8, left align with 8 spaces filled with 8
999999999 # f'{9:9<9}', means start with 9, left align with 9 spaces filled with 9
您已经知道 f 字符串 f'{a:{a}<{a}'
的作用 - 当在字符串中给出 {object}
时,它将替换为所述对象。在这种情况下,a
的范围是 1 到 9。
那么您只需要了解 {9:9<9}
的作用即可。这是一个字符串格式化程序,如 the documentation 答案已提供:
'<'
Forces the field to be left-aligned within the available space (this is the default for most objects).
x<y
部分表示将文本左对齐,宽度为 y
spaces。对于任何未使用的 space,用字符 x
填充它。所以你以 {9}
作为第一个字符开始,对于其余 8 个未使用的 space,用 {9}
填充它。这就是 {9:9<9}
所做的。
然后你应用相同的逻辑,看看每次迭代是如何发生的。
更重要的是,需要注意的是,"magic"这种感觉往往只是缺乏理解。一旦你花时间消化和理解这个过程,它就会变得非常幻灭,你就会开悟。