Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 3, 2017 18:54:36

oleg.p
Зарегистрирован: 2017-02-03
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Strings: perl vs c

Много у кого спрашивал, но до сих пор не получил более менее внятного ответа.
Может на этом форуме мне кто-нибудь объяснит.

Почему создатели питона в основу работы со строками положили не perl-подобный синтаксис, а нечто из си?

Чем конструкция типа “text $var1 text” хуже чем “text % text” % var1 ???

Офлайн

#2 Фев. 3, 2017 19:07:49

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

Strings: perl vs c

oleg.p
начать с того, что такой код в питоне не заработает

“text % text” % var1?

 >>> "text % text" % var1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: unsupported format character 't' (0x74) at index 7
>>>

Продолжим мы тем, что говоря “а почему не вот так”, вы должны привести пример, почему по-вашему вот так было бы лучше, чем есть.

Ну и закончим тем, что в питоне те шаблоны строк, которые вы имеете в виду давно уже считаются устаревшими и не применяются.



Офлайн

#3 Фев. 3, 2017 19:18:16

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

Strings: perl vs c

oleg.p
0) вам уже сказали тчо пример не рабочий
1) Задавать такой вопрос надо тому кто принял решение, а не сообщество.
2) Вас действительно интересует этот вопрос настолько что вы бегаете по форумам распрашивая это?
3) Зачем вам эта информация? Как она вам поможет? Как вы ее использовать будете?
4) Ну и вот собственно Влияние других языков на Python



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

Отредактировано JOHN_16 (Фев. 3, 2017 19:20:56)

Офлайн

#4 Фев. 3, 2017 19:21:19

oleg.p
Зарегистрирован: 2017-02-03
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Strings: perl vs c

FishHook
начать с того, что такой код в питоне не заработает
“text % text” % var1?

Прошу прощение: “text %s text” % var1

Офлайн

#5 Фев. 3, 2017 19:33:00

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

Strings: perl vs c

oleg.p
Прошу прощение: “text %s text” % var1
Теперь внимание, вопрос! Зачем тут s. Не мучай мозг, отвечу. Затем, что вариантов форматирования великое множество, s - один из них. А есть еще b, c, d, x, X, o, n, а еще есть различные виды представления флоатов, дат и вообще всякое.

 >>> "+%06.2f" % 9.89723
'+009.90'
покажи, как там в перле будет?



Офлайн

#6 Фев. 4, 2017 01:29:12

oleg.p
Зарегистрирован: 2017-02-03
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Strings: perl vs c

FishHook
oleg.p
Прошу прощение: “text %s text” % var1
Теперь внимание, вопрос! Зачем тут s. Не мучай мозг, отвечу. Затем, что вариантов форматирования великое множество, s - один из них. А есть еще b, c, d, x, X, o, n, а еще есть различные виды представления флоатов, дат и вообще всякое.

Ну я ж не совсем тупой, про форматирование в курсе.

Однако со стоками чаще всего надо просто вставить одну строку в другую, не используя форматирование. И да ладно с этим примером “text %s text” % var1, когда вставляется всего одна подстрока – как нибудь уж можно пережить и привыкнуть.

Но представьте ужас, когда надо вставить 5 подстрок в длиннющую строку:

“%s говорил на том изысканном французском языке, на котором не только говорили, но и думали наши %s, и с теми, тихими, покровительственными интонациями, которые свойственны %s в свете и при дворе значительному %s. Он подошел к %s, поцеловал ее руку, подставив ей свою надушенную и сияющую лысину, и покойно уселся на диване.” % var1, var2, var3, var4, var5

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

Офлайн

#7 Фев. 4, 2017 02:18:18

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

Strings: perl vs c

  
>>> 'Hello, %(name1)s, how are you? %(name2)s, look at %(name1)s.' % {'name1': 'John', 'name2': 'Nancy'}
'Hello, John, how are you? Nancy, look at John.'
>>>



Офлайн

#8 Фев. 4, 2017 08:56:14

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Strings: perl vs c

oleg.p
Чем конструкция типа “text $var1 text” хуже чем “text % text” % var1 ???
Она хуже тем что нельзя указать какими переменными ограничиться и наверное нельзя задать выражения для подстановки.

Если вам нужен ближайший аналог то он задается буковкой f перед строкой
https://docs.python.org/3/whatsnew/3.6.html :
 >>> name = "Fred"
>>> f"He said his name is {name}."
'He said his name is Fred.'
В старых версиях допустимо
 >>> name = "Fred"
>>> n2 = 2
>>> "He said his name is {name} {n2}.".format(**globals())
'He said his name is Fred 2.'
т.е. никого особо не напрягает необходимость получить словарь из всех, всех локальных, всех глобальных переменных.

Вообще в идеологии питона, как и c++ как и perl заложено использование сторонних библиотек для решения конкретных задач. Ядро не обязано реализовывать все.
В данном случае можно использовать

http://docs.makotemplates.org/en/latest/
http://jinja.pocoo.org/



Отредактировано doza_and (Фев. 4, 2017 09:01:10)

Офлайн

#9 Фев. 4, 2017 10:49:22

oleg.p
Зарегистрирован: 2017-02-03
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Strings: perl vs c

Всем спасибо за прекрасные примеры!

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version