Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 11, 2015 02:45:44

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

PEP 0498 -- Literal String Formatting

https://www.python.org/dev/peps/pep-0498/

Вниманию всего сообщества Python представляет новый метод форматирования строк.

Его не назовешь революционным, скорее это эволюция существующего строчного метода format.

Высказываемся о плюсах и минусах, которые вы видите в данном PEP



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#2 Авг. 11, 2015 02:53:37

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

PEP 0498 -- Literal String Formatting

Шаблоны напоминает. А так да, здорово. Только вот пока к этому всему подтянуться модулестроители, я уже постарею или умру

Офлайн

#3 Авг. 11, 2015 06:20:33

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

PEP 0498 -- Literal String Formatting

Мне не нравится захват переменных из контекста, вместо явной передачи. Мне не нравится код внутри строк, это фактически eval. Этот PEP решает мааааленькую проблемку (кому надо форматировать большие куски текста, тот использует шаблонизаторы), но открывает большое поле для уязвимостей.

У вас на стройке sql-инъекции были? Будут…



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#4 Авг. 11, 2015 06:58:33

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

PEP 0498 -- Literal String Formatting

Может я плохо смотрел, но по ссылке не увидел одного ключевого момента: как работает этот формат, как замыкание или как вызов функции?

lines = []
for i in range(10):
    lines.append(f'Line # {i}')
Что в итоге получим в списке?



Офлайн

#5 Авг. 11, 2015 08:01:23

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

PEP 0498 -- Literal String Formatting

FishHook
как работает этот формат, как замыкание или как вызов функции?
аналогичный вопрос возник и у меня. Пока что ответа нет, надо копать глубже, в mail lists может.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#6 Авг. 11, 2015 08:03:30

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

PEP 0498 -- Literal String Formatting

и собственно еще и вопрос как этим пользоваться если уже есть строка/список строк подготовленных под такого рода форматирование.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#7 Авг. 11, 2015 08:37:21

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

PEP 0498 -- Literal String Formatting

Вообще я согласен с Пухом, побочные эффекты в шаблонах форматирования, это уже несколько за гранью. Идея в общет то понятна, и есть примеры удачной реализации, в скале, например. Но вот только в скале переменнные как правило неизменяемые.
Лучше бы научили join автоматически к строке кастовать.



Офлайн

#8 Авг. 11, 2015 10:39:38

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

PEP 0498 -- Literal String Formatting

А по мне так неплохая идея. В примере FishHook получим максимально явный вариант: 1, 2, 3, 4…
SQL-инъекции? Да ладно! А сегодня с format инъекций не бывает? Если у кого-то не хватает ума так не делать, то это, как мне кажется, не проблемы языка.



Офлайн

#9 Авг. 11, 2015 12:12:53

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2683
Репутация: +  182  -
Профиль   Отправить e-mail  

PEP 0498 -- Literal String Formatting

Раньше join-ом пользовались и все были довольны, потом форматные строки сделали, потом format, теперь ещё какую-то хрень замутить пытаются. Задолбали!



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Авг. 11, 2015 12:14:37)

Онлайн

#10 Авг. 11, 2015 12:24:40

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

PEP 0498 -- Literal String Formatting

На счет безопастности, представим у нас каким либо образом появился опасный объект, вот код ниже (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}')
то эффект будет тот же? Конечно пример условный, но суть. Если в первом случае можно сделать проверку на тип хотя бы, то во втором уже как то не очень?



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version