Reputation: 45
I'm trying to learn Python from the book: "Fluent Python, 2nd Ed" by Luciano Ramalho.
Example 2-8. Unpacking nested tuples to access the longitude
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()
Here in print(f'{"":15} | {"latitude":>9} | {"longitude":>9}')
I can't understand logic behind using {"":15}, {"latitude":>9, {"longitude":>9}
part of the code. Can anyone can explain why the writer uses this in a print()
function call?
The output:
| lat. | lon.
Mexico City | 19.4333 | -99.1333
New York-Newark | 40.8086 | -74.0204
São Paulo | -23.5478 | -46.6358
Upvotes: 0
Views: 1204
Reputation: 528
print(f'{"":15} | {"latitude":>9} | {"longitude":>9}')
Here the author is just formatting the values nicely to human readers. He's using what's knowns as f-strings which is used to interpolate strings.
You can place expressions inside curly braces of strings prefixed with an f
, as in this case.
https://docs.python.org/3.9/library/string.html#format-specification-mini-language
The colon is used to apply a format specifier to the expression. In this case, the specifier >
"Forces the field to be right-aligned within the available space", and the number 9 is the width for that specifier.
https://docs.python.org/3.9/library/string.html#format-specification-mini-language
Upvotes: 1
Reputation: 182048
The purpose is to print the table header with the same field widths as the actual table, so that they line up. Compare these lines:
print(f'{"":15} | {"latitude":>9} | {"longitude":>9}')
print(f'{name:15} | {lat:9.4f} | {lon:9.4f}')
Instead of variables (name
, lat
, lon
), the author is passing literal strings (""
, "latitude"
, "longitude"
) to the f-string format arguments instead. This is valid, because the part between {}
can be any valid expression.
By using the same field widths (15
, 9
, 9
) in both statements, the code ensures that the column headings have the same width as the actual table cells, so they are aligned in the output.
Upvotes: 2