Форум сайта python.su
RodegastНапиши то же самое через процент, что я написал выше через str.format().
Кто тебе запрещает использовать имена в месте с %?
Rodegast"aaaaa {}".format("bbb")
>>> 'aaaaa %s' % 'bbb' 'aaaaa bbb' >>> 'aaaaa %s' % 1 'aaaaa 1' >>> 'aaaaa %s' % 1+1j Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: must be str, not complex >>> >>> >>> 'aaaaa {}'.format('bbb') 'aaaaa bbb' >>> 'aaaaa {}'.format(1) 'aaaaa 1' >>> 'aaaaa {}'.format(1+1j) 'aaaaa (1+1j)' >>>
Офлайн
> Напиши то же самое через процент, что я написал выше через str.format().
>>> 'User: %(user)s, Address: %(address)s, Phone: %(phone)i'%{"user": "John", "address": "msk", "phone": 123} 'User: John, Address: msk, Phone: 123'
Офлайн
RodegastНеа, не работает
> Напиши то же самое через процент, что я написал выше через str.format().>>> 'User: %(user)s, Address: %(address)s, Phone: %(phone)i'%{"user": "John", "address": "msk", "phone": 123} 'User: John, Address: msk, Phone: 123'
>>> '%(phone)i' % {'phone': 555} '555' >>> '%(phone)i' % {'phone': '555-55-55'} Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: %i format: a number is required, not str >>>
>>> '{phone}'.format(phone='555-55-55') '555-55-55' >>> '{phone}'.format(phone=555) '555' >>>
RodegastВ конце что-то присоединить - это слишком частный случай. Я таким пользуюсь чаще всего, когда сообщения об ошибках составляю. Да и то, это только потому, что они имеют стандартную форму “progname: error: message: details” , когда постепенно всё присоединяешь. В остальных 90% случаев конкатенация не катит, потому что плюсики в середине начинают просто мешать. Чтобы добавить/удалить одно новое/старое слово, нужно кучу плюсов вставлять/удалять и выравнивать потом это всё.
Сколько же раз нужно объяснять что для канкатинации есть оператор +?
Отредактировано py.user.next (Март 31, 2021 00:00:22)
Офлайн
Rodegastконкатенация заметно медленне всего остального изза того что строки неизменяемый тип. На простых примерах типа ‘Hello’ + ‘World’ оно работает, Но на сложных - можна добиться ускорения в десятки-сотни раз заменив конкатенацию на format, % или f-строки.
Сколько же раз нужно объяснять что для канкатинации есть оператор +?
[code python][/code]
Офлайн
> Неа, не работает
И очень хорошо что не работает ибо проверку типов ничто не отменяет.
> В конце что-то присоединить - это слишком частный случай
Я с этим случаем периодически сталкиваюсь.
> конкатенация заметно медленне всего остального
Так было лет 10 назад, сейчас оно +/- одинаково работает.
Отредактировано Rodegast (Март 31, 2021 12:22:11)
Офлайн
RodegastВ том-то и дело, что мне не нужна проверка типов. Но также я могу её включить, указав спецификатор конкретно.
И очень хорошо что не работает ибо проверку типов ничто не отменяет.
The ‘%’ operator is primarily limited by the fact that it is a binary operator, and therefore can take at most two arguments. One of those arguments is already dedicated to the format string, leaving all other variables to be squeezed into the remaining argument. The current practice is to use either a dictionary or a tuple as the second argument, but as many people have commented , this lacks flexibility. The “all or nothing” approach (meaning that one must choose between only positional arguments, or only named arguments) is felt to be overly constraining.
>>> import datetime >>> >>> 'Today is {:%d %b %Y}'.format(datetime.datetime.now()) 'Today is 01 Apr 2021' >>>
>>> class Int(int): ... def __format__(self, spec): ... if spec.startswith('^'): ... return str(self ** int(spec[1:])) ... else: ... return super().__format__(spec) ... >>> n = Int(5) >>> n 5 >>> '{} {:d} {:^2} {:^3}'.format(n, n, n, n) '5 5 25 125' >>>
Отредактировано py.user.next (Апрель 1, 2021 00:05:26)
Офлайн
> Так что ты не можешь повторить то, что я выше написал, из-за ограничений, которые есть у процента. Просто не можешь.
Ты наверное просто скудоумный если думаешь что я не смогу привести тип значения к строке
> К тому же формат даёт то преимущество, что его спецификаторы можно переопределить.
Все эти переопределения с отсутствием контроля типов могут только вызвать проблемы.
Офлайн
Rodegast
Ты наверное просто скудоумный если думаешь что я не смогу привести тип значения к строке
RodegastИ как ты будешь приводить к строке? В том-то и дело, что никак. Всё надо переделывать только из-за этого процента. А мне вот не надо ничего переделывать и приводить ничего не надо. Так что пока ты будешь переделывать что-то там в очередной раз, какую-нибудь мелочь, я уже буду вторую программу писать, потому что первая у меня уже будет вся написана.>>> 'User: %(user)s, Address: %(address)s, Phone: %(phone)i'%{"user": "John", "address": "msk", "phone": 123} 'User: John, Address: msk, Phone: 123'
RodegastОбычное переопределение магического метода. Что тебя так пугает в этом, не знаю. Наверное, неуверенность в том, что у тебя получится в итоге. Надо больше писать просто, чтобы опыт придавал уверенности.
Все эти переопределения
Офлайн
> И как ты будешь приводить к строке? В том-то и дело, что никак.
Что же ты такое не сообразительный…
>>> [ ... 'User: %(user)s, Address: %(address)s, Phone: %(phone)s'%{"user": str(x), "address": str(y), "phone": str(z)} ... for x, y, z in [('John', 'Street 123', 123),('Bob', 'Street 789', '555-55-55')] ... ] ['User: John, Address: Street 123, Phone: 123', 'User: Bob, Address: Street 789, Phone: 555-55-55']
Офлайн
RodegastЭто ты хочешь сказать, что это лучше короткого str.format()?
Что же ты такое не сообразительный…>>> [ ... 'User: %(user)s, Address: %(address)s, Phone: %(phone)s'%{"user": str(x), "address": str(y), "phone": str(z)} ... for x, y, z in [('John', 'Street 123', 123),('Bob', 'Street 789', '555-55-55')] ... ] ['User: John, Address: Street 123, Phone: 123', 'User: Bob, Address: Street 789, Phone: 555-55-55']
RodegastЯ думаю, ты не знаешь, что такое полиморфизм, как им пользоваться, для чего он нужен, что он даёт и почему его нужно использовать. Вот в этом вся твоя проблема. Ты думал, что он поймётся как-то сам, из космоса, а для этого, на самом деле, надо книжки читать обязательно. Поэтому твоё окружение, такое же, оно точно так же не знает, что такое полиморфизм, потому что вы учитесь друг у друга, а книжек никто из вас не читал. В итоге вы все нихера не знаете. А когда вы все нихера не знаете, у вас ничего не получается родить. В итоге ваш “большой проект”, он большой только по количеству строк. Но это количество строк ничего не делает по своей сути. А ты думал, что это всё никому не нужно? Так это не нужно тем, кто нихера не делает, не производит ничего.
Кто может дать гарантию что не придут данные для которых эта хрень не определена каким то неожиданным образом.
Ты наверное в больших проектах не участвовал, по этому подобных вещей не понимаешь.
Офлайн