Форум сайта python.su
https://www.python.org/dev/peps/pep-0498/
Вниманию всего сообщества Python представляет новый метод форматирования строк.
Его не назовешь революционным, скорее это эволюция существующего строчного метода format.
Высказываемся о плюсах и минусах, которые вы видите в данном PEP
Офлайн
Шаблоны напоминает. А так да, здорово. Только вот пока к этому всему подтянуться модулестроители, я уже постарею или умру
Офлайн
Мне не нравится захват переменных из контекста, вместо явной передачи. Мне не нравится код внутри строк, это фактически eval. Этот PEP решает мааааленькую проблемку (кому надо форматировать большие куски текста, тот использует шаблонизаторы), но открывает большое поле для уязвимостей.
У вас на стройке sql-инъекции были? Будут…
Офлайн
Может я плохо смотрел, но по ссылке не увидел одного ключевого момента: как работает этот формат, как замыкание или как вызов функции?
lines = [] for i in range(10): lines.append(f'Line # {i}')
Офлайн
FishHookаналогичный вопрос возник и у меня. Пока что ответа нет, надо копать глубже, в mail lists может.
как работает этот формат, как замыкание или как вызов функции?
Офлайн
и собственно еще и вопрос как этим пользоваться если уже есть строка/список строк подготовленных под такого рода форматирование.
Офлайн
Вообще я согласен с Пухом, побочные эффекты в шаблонах форматирования, это уже несколько за гранью. Идея в общет то понятна, и есть примеры удачной реализации, в скале, например. Но вот только в скале переменнные как правило неизменяемые.
Лучше бы научили join автоматически к строке кастовать.
Офлайн
А по мне так неплохая идея. В примере FishHook получим максимально явный вариант: 1, 2, 3, 4…
SQL-инъекции? Да ладно! А сегодня с format инъекций не бывает? Если у кого-то не хватает ума так не делать, то это, как мне кажется, не проблемы языка.
Офлайн
Раньше join-ом пользовались и все были довольны, потом форматные строки сделали, потом format, теперь ещё какую-то хрень замутить пытаются. Задолбали!
Отредактировано Rodegast (Авг. 11, 2015 12:14:37)
Офлайн
На счет безопастности, представим у нас каким либо образом появился опасный объект, вот код ниже (Python2) сработает на ура.
>>> class Evil(object): ... def do_evil(self): ... os.system('touch evil_was_here') ... def __str__(self): ... self.do_evil() ... return 'Evil' ... >>> value = Evil() >>> >>> print 'Be happy guy with {}'.format(value) Be happy guy with Evil
print(f'Be happy guy with {value}')
Офлайн