LINUX.ORG.RU

f-строки или str.format - может ли одно полностью заменить другое, поделитесь опытом?

 ,


0

2

Сабж. Я много лет эти фичи игнорировал и вообще не любил третий питон - оператора % из py2 мне хватало. Но тут занялся одной штукой для преобразования аргументов командной строки, и понял что вещи в общем годные, правда опыта с ними у меня маловато.

В связи с этим нубвопрос - можно ли считать, что f-строки полностью заменяют str.format? Или это все таки разное, и str.format предпочтительнее и предсказуемее (требует меньше букв) в каких то случаях?

Речь о паттернах само собой (строке что форматируется), а не о способах вызова.

★★★★★
Ответ на: комментарий от qulinxao3

Я так и не понял, зачем Вам писать вот это

(full:=f'{var=}')[:full.index('=')]
#до моржа:
f'{var=}'.split('=',1)[0]

когда можно написать вот это

'var='[:-1]

Если уж по каким то причинам нужно иметь именно статическую строку ‘var=’ а не ‘var’?

AntonI ★★★★★
() автор топика
Ответ на: комментарий от AntonI

когда f’{var=}’ инструмент в ide видит как употребление имени и заменит имя при переименовании [ только именно имени а не подстроки когда «мастера» регулярками балуются не пользуясь божественными sre (https://doc.cat-v.org/bell_labs/structural_regexps/se.pdf) ]

строка же ‘var=’ перестанет быть когерентной

при больших усилиях при помощи % и str.format можно получить видимо всё что делает f-string

однако f-string прикрутили в первую очередь не для расширения возможностей форматирования как такового, а для изменения относительной(удельной) сложности некоторых вариантов форматирования относительно других вариантов -

т.е. как обычно со стандартами (Распухание лутца ещё не худший пример)

теперь для получения "сверхоптимального " варианта стоит знать все три варианта f- % str.format + тележка различных шаблонизаторов начиная с string.Template :)

а так f-string вполне удобны при ручном форматировании

строка%кортеж при …

крч каждый … как он …

qulinxao3 ★☆
()
Ответ на: комментарий от FishHook

пон наступ:

pprint.pprint(rname, stream=open(
                    join(fld, name2str(f'{rname=}')), 'w'), width=333)  # nero are

в дальнейшем подпроцесы читают сей файл содержащий уже не помню что

и выдают на гора свои результаты которые затем родитель «интегрирует»

по сути в файле сохраняется промежуточная структура - дёшево и сердито

qulinxao3 ★☆
()