f-строки и format
f-строки и format
f-строки появились в python 3.6
и считаются более понятным и быстрым способом форматирования строк.
Простые примеры использования f-строк:
In [1]: a = ['10', '1', '1', '1']
...: b = '24'
...: print(f"{'.'.join(a)}/{b}")
10.1.1.1/24
In [2]: ip_list = ['10.1.1.1/24', '10.2.2.2/24', '10.3.3.3/24']
...: print(f"{len(ip_list)}")
3
Для f-строк:
- не получится заранее задать шаблон, а потом его использовать. Если нужен шаблон, лучше использовать
format
- внутри конструкции можно использовать методы и функции
- выполняются сразу, как только до выражения дошла очередь, работают быстрее, чем
format
При использовании format
переменные можно задавать в теле:
In [3]: print("{}/{}".format('10.1.1.1', '24'))
10.1.1.1/24
In [4]: print("{ip}/{mask}".format(ip='10.1.1.1', mask='24'))
10.1.1.1/24
При использовании f-строк
переменные необходимо определить заранее во избежание ошибки:
In [5]: ip = '10.1.1.1'
...: mask = '24'
...: print(f"{ip}/{mask}")
10.1.1.1/24
f-строки
удобно применять в циклах:
In [6]: ip_list = ['10.1.1.1/24', '10.2.2.2/24', '10.3.3.3/24']
...: for address in ip_list:
...: ip, mask = address.split('/')
...: print(f"ip: {ip}, mask: {mask}")
...:
ip: 10.1.1.1, mask: 24
ip: 10.2.2.2, mask: 24
ip: 10.3.3.3, mask: 24
Можно использовать те же значения, что и в format
. Например, так:
In [7]: ip_list = ['10.1.1.1', '10.2.2.2', '10.3.3.3']
...: for address in ip_list:
...: oct1, oct2, oct3, oct4 = address.split('.')
...: print(f'''
...: ip:
...: {oct1:<8} {oct2:<8} {oct3:<8} {oct4:<8}
...: {int(oct1):08b} {int(oct2):08b} {int(oct3):08b} {int(oct4):08b}
...: ''')
...:
ip:
10 1 1 1
00001010 00000001 00000001 00000001
ip:
10 2 2 2
00001010 00000010 00000010 00000010
ip:
10 3 3 3
00001010 00000011 00000011 00000011
Иногда format
удобнее, чем f-строки
. Например, если заранее необходимо определить шаблон, который будет применяться в скрипте много раз. В случае f-строк
можно применить функцию (но создание функции только для вывода строки по шаблону не имеет смысла):
In [8]: def show_me_ip(ip, mask):
...: return f"IP: {ip}, mask: {mask}"
In [9]: show_me_ip('10.1.1.1', 24)
Out[9]: 'IP: 10.1.1.1, mask: 24'