Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PHP, Perl, Python Новый топик    Ответить
 Построение строки из фрагментов, хранящихся в переменных  [new]
GrayMagellan
Member

Откуда:
Сообщений: 153
Вообще нуб в этом языке. Сегодня столкнулся с ним в первый раз. И вопросы тоже нубские. Есть две строки кода, которые выполняют одну и ту же работу - формируют строку из фрагментов. Но реализованы они по разному:

Первая строка:
"Cat key = %s" % str(v_catkey)

Вторая строка:
"Flat file name = " + v_flat_file

Почему в первой строке фрагменты объединяются с помощью оператора "%", а во второй строке - с помощью "+"?
17 июл 17, 12:38    [20649876]     Ответить | Цитировать Сообщить модератору
 Re: Построение строки из фрагментов, хранящихся в переменных  [new]
GrayMagellan
Member

Откуда:
Сообщений: 153
Судя по всему, в первой строке v_catkey не представляет собой строку, поэтому конвертируется в нее с помощью str(). Во второй строке, наверное, v_flat_file сразу представляет собой стразу строковую переменную, поэтому используется "+"?
17 июл 17, 12:40    [20649882]     Ответить | Цитировать Сообщить модератору
 Re: Построение строки из фрагментов, хранящихся в переменных  [new]
Hett
Member

Откуда: Бийск, Новосибирск
Сообщений: 12562
Это что, питон?
17 июл 17, 12:41    [20649887]     Ответить | Цитировать Сообщить модератору
 Re: Построение строки из фрагментов, хранящихся в переменных  [new]
Hett
Member

Откуда: Бийск, Новосибирск
Сообщений: 12562
Первый случай - это форматирование строки, наподобие printf в С++, это более мощный инструмент.
Второй - это обычная конкатенация.
17 июл 17, 12:44    [20649911]     Ответить | Цитировать Сообщить модератору
 Re: Построение строки из фрагментов, хранящихся в переменных  [new]
GrayMagellan
Member

Откуда:
Сообщений: 153
не, по идее это Java.
17 июл 17, 13:29    [20650111]     Ответить | Цитировать Сообщить модератору
 Re: Построение строки из фрагментов, хранящихся в переменных  [new]
GrayMagellan
Member

Откуда:
Сообщений: 153
А что такого мощного может быть в том, чтобы две строки сцепить в одну?! Обычная операция...
17 июл 17, 13:30    [20650118]     Ответить | Цитировать Сообщить модератору
 Re: Построение строки из фрагментов, хранящихся в переменных  [new]
GrayMagellan
Member

Откуда:
Сообщений: 153
Или что такого сложного в том, чтобы две строки сцепить в одну?! Это же простейшие вещи!
17 июл 17, 13:31    [20650122]     Ответить | Цитировать Сообщить модератору
 Re: Построение строки из фрагментов, хранящихся в переменных  [new]
Hett
Member

Откуда: Бийск, Новосибирск
Сообщений: 12562
GrayMagellan
А что такого мощного может быть в том, чтобы две строки сцепить в одну?! Обычная операция...

Конкатенация это в данном случае, но инструмент может и больше, например:

>>> print "Two numbers after commaa: %.2f" % (0.1)
Two numbers after commaa: 0.10
17 июл 17, 13:38    [20650159]     Ответить | Цитировать Сообщить модератору
 Re: Построение строки из фрагментов, хранящихся в переменных  [new]
GrayMagellan
Member

Откуда:
Сообщений: 153
Hett,

Гм... Я правильно понимаю, что первый % в вашем примере - это символ форматирования? А второй - это какой-то особый вид конкатенации? Почему не используется такая конструкция:

>>> print "Two numbers after commaa: %.2f" + (0.1)
17 июл 17, 17:01    [20651135]     Ответить | Цитировать Сообщить модератору
 Re: Построение строки из фрагментов, хранящихся в переменных  [new]
Hett
Member

Откуда: Бийск, Новосибирск
Сообщений: 12562
Скукота... Читать документацию не пробовали? :)
17 июл 17, 20:27    [20651895]     Ответить | Цитировать Сообщить модератору
 Re: Построение строки из фрагментов, хранящихся в переменных  [new]
mayton
Member

Откуда: loopback
Сообщений: 35416
GrayMagellan
Первая строка:
"Cat key = %s" % str(v_catkey)

Вторая строка:
"Flat file name = " + v_flat_file


Почему в первой строке фрагменты объединяются с помощью оператора "%", а во второй строке - с помощью "+"?

Практически всегда имеет смысл использовать конкатенацию с плюсом "+".
Для старых компилляторов типа 1.5...1.6 рекомендовалось делать StringBuilder::append(..)
но новые достаточно хорошо определяют когда нужно буферизировать.

Исключение составляют случаи когда строки нужно не конкатенировать а форматировать сложным
образом. Как например с вещественными числами или с датами.

Справочная инфа здесь https://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html
17 июл 17, 23:03    [20652075]     Ответить | Цитировать Сообщить модератору
 Re: Построение строки из фрагментов, хранящихся в переменных  [new]
Usman
Member

Откуда: من ألماتي
Сообщений: 4933
Hett
Скукота...
заНУБство (:
GrayMagellan
Почему в первой строке фрагменты объединяются с помощью оператора "%", а во второй строке - с помощью "+"?
первый вариант - форматирование, а второй - конкатенация.
17 июл 17, 23:58    [20652131]     Ответить | Цитировать Сообщить модератору
 Re: Построение строки из фрагментов, хранящихся в переменных  [new]
GrayMagellan
Member

Откуда:
Сообщений: 153
Hett,

пробовали искать в документации на Java все вхождения по ключевому слову "%"?
19 июл 17, 11:45    [20656910]     Ответить | Цитировать Сообщить модератору
 Re: Построение строки из фрагментов, хранящихся в переменных  [new]
Hett
Member

Откуда: Бийск, Новосибирск
Сообщений: 12562
GrayMagellan,

Зачем?
19 июл 17, 11:47    [20656925]     Ответить | Цитировать Сообщить модератору
 Re: Построение строки из фрагментов, хранящихся в переменных  [new]
GrayMagellan
Member

Откуда:
Сообщений: 153
Я попробовал найти оператор % в списке операторов языка Java. Нашелся только такой (цитаты с http://proglang.su/java/operators?category=java&alias=40):

% Делит левый операнд на правый операнд и возвращает остаток A % B даст 0

А на хабрахабре https://habrahabr.ru/post/260767/ столько мути про конкатенацию пишут, что отпадает всякое желание что-либо конкатенировать в Java. И главное - конкатенации с помощью оператора % там не описано.


Ок, ладно, всем спасибо большое. Мне удалось безболезненно заменить % на +, и я так все и оставил.
19 июл 17, 11:52    [20656951]     Ответить | Цитировать Сообщить модератору
 Re: Построение строки из фрагментов, хранящихся в переменных  [new]
GrayMagellan
Member

Откуда:
Сообщений: 153
Hett,

Вы не обижайтесь на меня, но знаете почему автомат Калашникова так популярен во всем мире, а винтовка М-16, хотя и лучше его во много раз по ТТХ, используется только в американской армии? Я вам скажу - простота! Простые механизмы работают лучше в конечном итоге, чем сложные. Не понимаю, зачем столько нужно было накручивать вокруг простой конкатенации строк.
19 июл 17, 11:56    [20656971]     Ответить | Цитировать Сообщить модератору
 Re: Построение строки из фрагментов, хранящихся в переменных  [new]
Hett
Member

Откуда: Бийск, Новосибирск
Сообщений: 12562
В Java % - это деление по модулю.
19 июл 17, 11:57    [20656975]     Ответить | Цитировать Сообщить модератору
 Re: Построение строки из фрагментов, хранящихся в переменных  [new]
GrayMagellan
Member

Откуда:
Сообщений: 153
Hett,

но первая строка примера
"Cat key = %s" % str(v_catkey)
совсем не похожа на попытку поделить что-то...
19 июл 17, 12:01    [20656998]     Ответить | Цитировать Сообщить модератору
 Re: Построение строки из фрагментов, хранящихся в переменных  [new]
Hett
Member

Откуда: Бийск, Новосибирск
Сообщений: 12562
Так это питон, я сразу же сказал вам об этом.
19 июл 17, 12:01    [20657003]     Ответить | Цитировать Сообщить модератору
 Re: Построение строки из фрагментов, хранящихся в переменных  [new]
GrayMagellan
Member

Откуда:
Сообщений: 153
Ладно, фиг с ним. Задача решена. Спасибо и вам большое за информацию. В моем случае все было полезным.
19 июл 17, 12:02    [20657007]     Ответить | Цитировать Сообщить модератору
 Re: Построение строки из фрагментов, хранящихся в переменных  [new]
GrayMagellan
Member

Откуда:
Сообщений: 153
Hett,

а ведь вы правы! сейчас пошел еще раз почитал документацию на продукт, и там действительно написано, что внутренние скрипты пишутся на Питоне. Почему у меня в голове стукнула мысль, что там используется Java??? Простите великодушно.
19 июл 17, 12:06    [20657021]     Ответить | Цитировать Сообщить модератору
 Re: Построение строки из фрагментов, хранящихся в переменных  [new]
GrayMagellan
Member

Откуда:
Сообщений: 153
Можно тогда эту тему перенести в профильную ветку Питона как-то?! Кому писать просьбу?
19 июл 17, 12:07    [20657025]     Ответить | Цитировать Сообщить модератору
 Re: Построение строки из фрагментов, хранящихся в переменных  [new]
Blazkowicz
Member

Откуда:
Сообщений: 23475
GrayMagellan
Можно тогда эту тему перенести в профильную ветку Питона как-то?! Кому писать просьбу?

http://www.sql.ru/forum/actualutils.aspx?action=notifymod&msg=20649876
19 июл 17, 12:50    [20657250]     Ответить | Цитировать Сообщить модератору
 Re: Построение строки из фрагментов, хранящихся в переменных  [new]
Hett
Member

Откуда: Бийск, Новосибирск
Сообщений: 12562
"Cat key = %s" % str(v_catkey)

Вообще, конечно, часть такое наблюдаю по работе, руки оторвать хочется.
19 июл 17, 12:54    [20657280]     Ответить | Цитировать Сообщить модератору
 Re: Построение строки из фрагментов, хранящихся в переменных  [new]
Hett
Member

Откуда: Бийск, Новосибирск
Сообщений: 12562
часто*

Модератор: Тема перенесена из форума "Java".
19 июл 17, 12:54    [20657282]     Ответить | Цитировать Сообщить модератору
Все форумы / PHP, Perl, Python Ответить