JOHN_16
Авг. 11, 2015 02:45:44
https://www.python.org/dev/peps/pep-0498/Вниманию всего сообщества Python представляет новый метод форматирования строк.
Его не назовешь революционным, скорее это эволюция существующего строчного метода format.
Высказываемся о плюсах и минусах, которые вы видите в данном PEP
4kpt_III
Авг. 11, 2015 02:53:37
Шаблоны напоминает. А так да, здорово. Только вот пока к этому всему подтянуться модулестроители, я уже постарею или умру
PooH
Авг. 11, 2015 06:20:33
Мне не нравится захват переменных из контекста, вместо явной передачи. Мне не нравится код внутри строк, это фактически eval. Этот PEP решает мааааленькую проблемку (кому надо форматировать большие куски текста, тот использует шаблонизаторы), но открывает большое поле для уязвимостей.
У вас на стройке sql-инъекции были? Будут…
FishHook
Авг. 11, 2015 06:58:33
Может я плохо смотрел, но по ссылке не увидел одного ключевого момента: как работает этот формат, как замыкание или как вызов функции?
lines = []
for i in range(10):
lines.append(f'Line # {i}')
Что в итоге получим в списке?
JOHN_16
Авг. 11, 2015 08:01:23
FishHook
как работает этот формат, как замыкание или как вызов функции?
аналогичный вопрос возник и у меня. Пока что ответа нет, надо копать глубже, в mail lists может.
JOHN_16
Авг. 11, 2015 08:03:30
и собственно еще и вопрос как этим пользоваться если уже есть строка/список строк подготовленных под такого рода форматирование.
FishHook
Авг. 11, 2015 08:37:21
Вообще я согласен с Пухом, побочные эффекты в шаблонах форматирования, это уже несколько за гранью. Идея в общет то понятна, и есть примеры удачной реализации, в скале, например. Но вот только в скале переменнные как правило неизменяемые.
Лучше бы научили join автоматически к строке кастовать.
ZZZ
Авг. 11, 2015 10:39:38
А по мне так неплохая идея. В примере FishHook получим максимально явный вариант: 1, 2, 3, 4…
SQL-инъекции? Да ладно! А сегодня с format инъекций не бывает? Если у кого-то не хватает ума так не делать, то это, как мне кажется, не проблемы языка.
Rodegast
Авг. 11, 2015 12:12:53
Раньше join-ом пользовались и все были довольны, потом форматные строки сделали, потом format, теперь ещё какую-то хрень замутить пытаются. Задолбали!
JOHN_16
Авг. 11, 2015 12:24:40
На счет безопастности, представим у нас каким либо образом появился опасный объект, вот код ниже (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}')
то эффект будет тот же? Конечно пример условный, но суть. Если в первом случае можно сделать проверку на тип хотя бы, то во втором уже как то не очень?