Python работа с функцией print + "format/f-строка"¶
Назначение¶
Функция print необходима для вывода в stdout форматированных данных.
Варианты работы¶
Стандартный формат вывода¶
# Вывод текста
In [78]: print("test")
test
# Вывод содержимого переменной
In [79]: a = "test"
In [80]: print(a)
test
# Вывод содержимого нескольких переменных
In [83]: a = 10
In [84]: b = "test"
In [85]: print(a, b)
10 test
# Вывод смешанный
In [94]: print("Here is", b, 10)
Here is test 10
Использования format¶
# Вывод
In [95]: a = 10
In [96]: b = "test"
In [97]: print("Here is {} {}".format(b, a))
Here is test 10
# Вывод в двоичном формате - b
In [98]: print("Here is {:s} {:b}".format(b, a))
Here is test 1010
# Шаблон для format - можно задать в отдельной переменной
In [110]: template = "Here is {:s} {:b}"
In [111]: print(template.format(b, a))
Here is test 1010
# Отступы и форматирование вывода
In [159]: ip = "192.168.0.1"
In [160]: mac = "0000.desd.beef"
In [161]: vlan = 100
## 15 знаков для каждой переменной
## оставшееся пространство "15" заполняется пробелами
In [162]: print("{:15} {:15} {:15}".format(ip, mac, vlan))
192.168.0.1 0000.desd.beef 100
## 15 знаков для каждой переменной
## форматирование по правому краю
## оставшееся пространство "15" заполняется пробелами
In [163]: print("{:>15} {:>15} {:>15}".format(ip, mac, vlan))
192.168.0.1 0000.desd.beef 100
## 15 знаков для каждой переменной
## форматирование по левому краю
## оставшееся пространство "15" заполняется пробелами
In [164]: print("{:<15} {:<15} {:<15}".format(ip, mac, vlan)
)
192.168.0.1 0000.desd.beef 100
## 15 знаков для каждой переменной
## форматирование по левому краю
## оставшееся пространство "15" заполняется пробелами
## представление влан в бинароном виде
In [165]: print("{:<15} {:<15} {:b}".format(ip, mac, vlan))
192.168.0.1 0000.desd.beef 1100100
## 15 знаков для каждой переменной
## форматирование по левому краю
## оставшееся пространство "15" заполняется пробелами
## представление влан в бинароном виде в 8-ми значном виде
## недостающие знаки в влане заполняются нулями
In [168]: print("{:<15} {:<15} {:08b}".format(ip, mac, vlan))
192.168.0.1 0000.desd.beef 01100100
## 15 знаков для каждой переменной
## форматирование по левому краю
## оставшееся пространство "15" заполняется пробелами
## представление влан в бинароном виде в 8-ми значном виде
## недостающие знаки в влане заполняются нулями
## нули добираться справа!!!
In [171]: print("{:<15} {:<15} {:<08b}".format(ip, mac, vlan))
192.168.0.1 0000.desd.beef 11001000
## А вот совсем странное...
## 15 знаков для каждой переменной - нули добираться справа!!!
## форматирование по левому краю
## оставшееся пространство "15" заполняется пробелами
## представление влан в бинароном виде в 8-ми значном виде
## недостающие знаки в влане заполняются нулями
In [174]: print("{:<015} {:<015} {:<08b}".format(ip, mac, vlan))
192.168.0.10000 0000.desd.beef0 11001000
Шаблон для format¶
# Шаблон для format удобно использовать для сложного форматирования
In [121]: items = ["Prefix", "AD/Metric", "Next-Hop", "Last update", "Outbound Interface"]
In [122]: values = ['10.0.24.0/24', '110/41', 'via', '10.0.13.3', '3d18h', 'FastEthernet0/0']
In [114]: template = "{:25} {}\n" * 5
In [115]: template
Out[115]: '{:25} {}\n{:25} {}\n{:25} {}\n{:25} {}\n{:25} {}\n'
In [124]: print(template.format(
...: items[0],values[0],
...: items[1],values[1],
...: items[2],values[2],
...: items[3],values[3],
...: items[4],values[4],
...: ),end="")
Prefix 10.0.24.0/24
AD/Metric 110/41
Next-Hop via
Last update 10.0.13.3
Outbound Interface 3d18h
Шаблон для format с указанием индексов значений¶
"По сути если значение используется несколько раз в шаблоне,"
"то достаточно указать его индекс в шаблоне в нужногм месте"
ip = "192.168.3.1"
template = """
{0:<8} {1:<8} {2:<8} {3:<8}
{0:>08b} {1:>08b} {2:>08b} {3:>08b}
"""
l = ip.split(".")
print(template.format(int(l[0]), int(l[1]), int(l[2]), int(l[3])))
"output"
192 168 3 1
11000000 10101000 00000011 00000001
"Для особых изощренцев можно сделать и через f-строки"
ip = "192.168.3.1"
print(f'''
{int(l[0]):<8} {int(l[1]):<8} {int(l[2]):<8} {int(l[3]):<8}
{int(l[0]):>08b} {int(l[1]):>08b} {int(l[2]):>08b} {int(l[3]):>08b}''')
"output"
192 168 3 1
11000000 10101000 00000011 00000001
Важное отличие f-строки от format
f-строки это выражение, которое выполняется, а не просто строка, п.э.
если при вызове f-строки ничего неизвестно о переменных в ней, то возникнет ошибка.
Литература¶
Последнее обновление: 2023-05-29