仅使用常量表达式的 f 字符串格式?
f-string formatting with only constant expressions?
我正在尝试从这本书中学习 Python:Luciano Ramalho 的“Fluent Python, 2nd Ed”。
示例 2-8。解包嵌套元组以访问经度
metro_areas = [
('Tokyo', 'JP', 36.933, (35.689722, 139.691667)),
('Delhi NCR', 'IN', 21.935, (28.613889, 77.208889)),
('Mexico City', 'MX', 20.142, (19.433333, -99.133333)),
('New York-Newark', 'US', 20.104, (40.808611, -74.020386)),
('São Paulo', 'BR', 19.649, (-23.547778, -46.635833)),
]
def main():
print(f'{"":15} | {"latitude":>9} | {"longitude":>9}')
for name, _, _, (lat, lon) in metro_areas:
if lon <= 0:
print(f'{name:15} | {lat:9.4f} | {lon:9.4f}')
if __name__ == '__main__':
main()
在 print(f'{"":15} | {"latitude":>9} | {"longitude":>9}')
中,我无法理解使用 {"":15}, {"latitude":>9, {"longitude":>9}
部分代码背后的逻辑。谁能解释为什么作者在 print()
函数调用中使用它?
输出:
| lat. | lon.
Mexico City | 19.4333 | -99.1333
New York-Newark | 40.8086 | -74.0204
São Paulo | -23.5478 | -46.6358
目的是打印出tableheader与实际table一样的字段宽度,让它们排成一行。比较这些行:
print(f'{"":15} | {"latitude":>9} | {"longitude":>9}')
print(f'{name:15} | {lat:9.4f} | {lon:9.4f}')
作者传递的不是变量(name
、lat
、lon
)而是文字字符串(""
、"latitude"
、"longitude"
) 改为 f-string 格式参数。这是有效的,因为 {}
之间的部分可以是任何有效的表达式。
通过在两个语句中使用相同的字段宽度(15
、9
、9
),代码可确保列标题与实际 table 个单元格,因此它们在输出中对齐。
print(f'{"":15} | {"latitude":>9} | {"longitude":>9}')
这里作者只是为人类读者很好地格式化值。他正在使用所谓的 f-strings 来插入字符串。
您可以将表达式放在以 f
为前缀的字符串的花括号内,如本例所示。
https://docs.python.org/3.9/library/string.html#format-specification-mini-language
冒号用于将格式说明符应用于表达式。在这种情况下,说明符 >
“强制字段在可用范围内右对齐 space”,数字 9 是该说明符的宽度。
https://docs.python.org/3.9/library/string.html#format-specification-mini-language
我正在尝试从这本书中学习 Python:Luciano Ramalho 的“Fluent Python, 2nd Ed”。
示例 2-8。解包嵌套元组以访问经度
metro_areas = [
('Tokyo', 'JP', 36.933, (35.689722, 139.691667)),
('Delhi NCR', 'IN', 21.935, (28.613889, 77.208889)),
('Mexico City', 'MX', 20.142, (19.433333, -99.133333)),
('New York-Newark', 'US', 20.104, (40.808611, -74.020386)),
('São Paulo', 'BR', 19.649, (-23.547778, -46.635833)),
]
def main():
print(f'{"":15} | {"latitude":>9} | {"longitude":>9}')
for name, _, _, (lat, lon) in metro_areas:
if lon <= 0:
print(f'{name:15} | {lat:9.4f} | {lon:9.4f}')
if __name__ == '__main__':
main()
在 print(f'{"":15} | {"latitude":>9} | {"longitude":>9}')
中,我无法理解使用 {"":15}, {"latitude":>9, {"longitude":>9}
部分代码背后的逻辑。谁能解释为什么作者在 print()
函数调用中使用它?
输出:
| lat. | lon.
Mexico City | 19.4333 | -99.1333
New York-Newark | 40.8086 | -74.0204
São Paulo | -23.5478 | -46.6358
目的是打印出tableheader与实际table一样的字段宽度,让它们排成一行。比较这些行:
print(f'{"":15} | {"latitude":>9} | {"longitude":>9}')
print(f'{name:15} | {lat:9.4f} | {lon:9.4f}')
作者传递的不是变量(name
、lat
、lon
)而是文字字符串(""
、"latitude"
、"longitude"
) 改为 f-string 格式参数。这是有效的,因为 {}
之间的部分可以是任何有效的表达式。
通过在两个语句中使用相同的字段宽度(15
、9
、9
),代码可确保列标题与实际 table 个单元格,因此它们在输出中对齐。
print(f'{"":15} | {"latitude":>9} | {"longitude":>9}')
这里作者只是为人类读者很好地格式化值。他正在使用所谓的 f-strings 来插入字符串。
您可以将表达式放在以 f
为前缀的字符串的花括号内,如本例所示。
https://docs.python.org/3.9/library/string.html#format-specification-mini-language
冒号用于将格式说明符应用于表达式。在这种情况下,说明符 >
“强制字段在可用范围内右对齐 space”,数字 9 是该说明符的宽度。
https://docs.python.org/3.9/library/string.html#format-specification-mini-language