@ru_python

Страница 7157 из 9768
Anton
26.11.2018
08:50:03
ИМХО складывать таким макаром стринги - такое

тем более когда уже f-строки появились

?? Eugene
26.11.2018
08:52:01
тут не сложение строк, а добавление строки в список

Anton
26.11.2018
08:52:12
это да, чет я попутал)

Google
Tigran
26.11.2018
08:52:13
ironically, иногда имеет смысл складывать стринги именно как списки

Artyem
26.11.2018
08:52:14
Tigran
26.11.2018
08:52:28
потому что добавление символа в список — О(1)

Aragaer
26.11.2018
08:52:41
а вот я спрошу все-таки

у меня есть строка, я хочу превратить ее в байты и в конце добавить \n

то есть из "abcd" сделать b'abcd\n'

как это оптимальнее сделать?

Tigran
26.11.2018
08:53:55
да вроде сильно оптимальнее, чем (s + "\n").encode(…), не сделаешь

Aragaer
26.11.2018
08:54:34
по идее если заранее знать, сколько байт получится в s.encode(), то сразу выделить места на +1 байт и туда вкрячить \n

Tigran
26.11.2018
08:54:37
плюс-минус константа на энкодинг \n

Aragaer
26.11.2018
08:54:40
тогда не надо делать промежуточную строку

Tigran
26.11.2018
08:54:55
ну это уже не питон будет)

Artyem
26.11.2018
08:55:00
неприятная особенность
так-то всё какраз ради удобства. в первом случае мы складываем два равнозначных объекта, и совершенно непонятно что должно получиться на выходе, толи список толи строка. во втором случае, мы однозначно можем сказать что на выходе должен быть список, поскольку именно его мы и пытаемся расширить, а писки расширяются любым итерируемым объектом. если бы сначала пришлось руками преобразовывать строку к списку, вот это было бы неприятно

Google
Tigran
26.11.2018
08:55:32
можно было бы поизгаляться и позаменять последний символ на более длинный в ютф-8, но сорян, в питоне неизменяемые строки

равно как и байтсы

Aragaer
26.11.2018
09:01:26
>>> o = io.BytesIO() >>> w = codecs.getwriter("utf-8")(o) >>> print("hello", "world", file=w) >>> o.getvalue() b'hello world\n'

но не знаю, как оно там будет работать под капотом

то есть есть надежда, что под BytesIO будет какая-то разумная буферизация, куда будут последовательно складываться байтики

Tishka17
26.11.2018
09:02:59
да вроде сильно оптимальнее, чем (s + "\n").encode(…), не сделаешь
интересно что быстрее (s.encode() + b’\n’) или (s+’\n’).encode()

Aragaer
26.11.2018
09:03:47
в первом случае аллоцируется лишний bytes, во втором str

но размеры у них реально одинаковые. При разумной кодировке

ктотам спец по timeit, посчитайте мне разные варианты, а?

Aragaer
26.11.2018
09:05:42
тот, который с bytesio и codecs, там по идее можно не пересоздавать объекты w и o на каждой итерации - у bytesio есть возможность очистки

я не умею его использовать 8)

Tishka17
26.11.2018
09:07:36
ну, со конкатенацией после encode у меня на 2% быстроее вышло

Tigran
26.11.2018
09:07:41
>>> timeit("(s+'\\n').encode('utf-8')", setup="s=''.join(map(str, range(10000)))") 2.193672516004881 >>> timeit("s.encode('utf-8') + b'\\n'", setup="s=''.join(map(str, range(10000)))") 2.1976108720118646

меньше процента

Tishka17
26.11.2018
09:08:04
эм

>>> timeit('a("hello, world!")', globals={"a": a}, number=10000000) 3.0316345890000207 >>> timeit('a("hello, world!")', globals={"a": b}, number=10000000) 2.9606989260000205

a и b - дв варианта реализации

Арсений
26.11.2018
09:08:59
PyTelegramBotApi С чем может быть связано? Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/util.py", line 59, in run task(*args, **kwargs) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 277, in __retrieve_updates self.process_new_updates(updates) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 314, in process_new_updates self.process_new_messages(new_messages) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 336, in process_new_messages self._notify_command_handlers(self.message_handlers, new_messages) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 1489, in _notify_command_handlers if self._test_message_handler(message_handler, message): File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 1470, in _test_message_handler if not self._test_filter(filter, filter_value, message): File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 1484, in _test_filter return test_cases.get(filter, lambda msg: False)(message) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 1480, in <lambda> 'commands': lambda msg: msg.content_type == 'text' and util.extract_command(msg.text) in filter_value, TypeError: 'in <string>' requires string as left operand, not NoneType " Exception in thread PollingThread: Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/util.py", line 59, in run task(*args, **kwargs) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 277, in __retrieve_updates self.process_new_updates(updates) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 314, in process_new_updates self.process_new_messages(new_messages) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 336, in process_new_messages self._notify_command_handlers(self.message_handlers, new_messages) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 1489, in _notify_command_handlers if self._test_message_handler(message_handler, message): File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 1470, in _test_message_handler if not self._test_filter(filter, filter_value, message): File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 1484, in _test_filter return test_cases.get(filter, lambda msg: False)(message) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 1480, in <lambda> 'commands': lambda msg: msg.content_type == 'text' and util.extract_command(msg.text) in filter_value, TypeError: 'in <string>' requires string as left operand, not NoneType During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/threading.py", line 917, in _bootstrap_inner self.run() File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/util.py", line 65, in run logger.error(type(e).__name__ + " occurred, args=" + str(e.args) + "\n" + traceback.format_exc()) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/logging/__init__.py", line 1361, in error self._log(ERROR, msg, args, **kwargs)

File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/logging/__init__.py", line 1468, in _log self.handle(record) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/logging/__init__.py", line 1478, in handle self.callHandlers(record) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/logging/__init__.py", line 1539, in callHandlers if record.levelno >= hdlr.level: AttributeError: 'NoneType' object has no attribute 'level’

Google
Tishka17
26.11.2018
09:09:22
меньше процента
а, ну чем длиннее строки, тем меньше разница

Tishka17
26.11.2018
09:09:33
а у тебя очень длинные =))))

Tigran
26.11.2018
09:09:45
короч, на коротких строках спешить некуда, а на длинных нет разницы

хотя стоит ещё попробовать строки с не-ASCII-символами

там может быть другая картина

Tishka17
26.11.2018
09:11:27
на 80 символах вообще рандомная разница

в любую сторону

PyTelegramBotApi С чем может быть связано? Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/util.py", line 59, in run task(*args, **kwargs) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 277, in __retrieve_updates self.process_new_updates(updates) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 314, in process_new_updates self.process_new_messages(new_messages) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 336, in process_new_messages self._notify_command_handlers(self.message_handlers, new_messages) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 1489, in _notify_command_handlers if self._test_message_handler(message_handler, message): File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 1470, in _test_message_handler if not self._test_filter(filter, filter_value, message): File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 1484, in _test_filter return test_cases.get(filter, lambda msg: False)(message) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 1480, in <lambda> 'commands': lambda msg: msg.content_type == 'text' and util.extract_command(msg.text) in filter_value, TypeError: 'in <string>' requires string as left operand, not NoneType " Exception in thread PollingThread: Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/util.py", line 59, in run task(*args, **kwargs) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 277, in __retrieve_updates self.process_new_updates(updates) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 314, in process_new_updates self.process_new_messages(new_messages) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 336, in process_new_messages self._notify_command_handlers(self.message_handlers, new_messages) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 1489, in _notify_command_handlers if self._test_message_handler(message_handler, message): File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 1470, in _test_message_handler if not self._test_filter(filter, filter_value, message): File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 1484, in _test_filter return test_cases.get(filter, lambda msg: False)(message) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 1480, in <lambda> 'commands': lambda msg: msg.content_type == 'text' and util.extract_command(msg.text) in filter_value, TypeError: 'in <string>' requires string as left operand, not NoneType During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/threading.py", line 917, in _bootstrap_inner self.run() File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/util.py", line 65, in run logger.error(type(e).__name__ + " occurred, args=" + str(e.args) + "\n" + traceback.format_exc()) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/logging/__init__.py", line 1361, in error self._log(ERROR, msg, args, **kwargs)
с чем угодно

Tigran
26.11.2018
09:13:07
PyTelegramBotApi С чем может быть связано? Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/util.py", line 59, in run task(*args, **kwargs) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 277, in __retrieve_updates self.process_new_updates(updates) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 314, in process_new_updates self.process_new_messages(new_messages) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 336, in process_new_messages self._notify_command_handlers(self.message_handlers, new_messages) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 1489, in _notify_command_handlers if self._test_message_handler(message_handler, message): File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 1470, in _test_message_handler if not self._test_filter(filter, filter_value, message): File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 1484, in _test_filter return test_cases.get(filter, lambda msg: False)(message) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 1480, in <lambda> 'commands': lambda msg: msg.content_type == 'text' and util.extract_command(msg.text) in filter_value, TypeError: 'in <string>' requires string as left operand, not NoneType " Exception in thread PollingThread: Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/util.py", line 59, in run task(*args, **kwargs) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 277, in __retrieve_updates self.process_new_updates(updates) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 314, in process_new_updates self.process_new_messages(new_messages) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 336, in process_new_messages self._notify_command_handlers(self.message_handlers, new_messages) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 1489, in _notify_command_handlers if self._test_message_handler(message_handler, message): File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 1470, in _test_message_handler if not self._test_filter(filter, filter_value, message): File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 1484, in _test_filter return test_cases.get(filter, lambda msg: False)(message) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/__init__.py", line 1480, in <lambda> 'commands': lambda msg: msg.content_type == 'text' and util.extract_command(msg.text) in filter_value, TypeError: 'in <string>' requires string as left operand, not NoneType During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/threading.py", line 917, in _bootstrap_inner self.run() File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/telebot/util.py", line 65, in run logger.error(type(e).__name__ + " occurred, args=" + str(e.args) + "\n" + traceback.format_exc()) File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/logging/__init__.py", line 1361, in error self._log(ERROR, msg, args, **kwargs)
util.extract_command(msg.text) вернуло None

Арсений
26.11.2018
09:13:31
Нашел, в чём причинга

Точнее, что вызывает ошибку: @bot.message_handler(commands='delete_me') def handle_delete_from_database(message): user = db.User.check_if_exists(message) user.delete_instance() bot.reply_to(message, 'Удалил все данные о тебе из базы данных')

hachiman
26.11.2018
09:14:03
Tigran
26.11.2018
09:15:09
поставь себе уточку рядом с компом

Google
Aragaer
26.11.2018
09:17:26
окай, мой вариант с кодеками в 2 раза медленнее простого +'\n', encode() 8)

хотя нет, если уменьшить длину строки, то сохраняется разница в 3 секунды

хмм

Сергей
26.11.2018
09:43:48
По моему это отмазка) надо всегда стараться изучить большее, чем тебе кажется к чему ты готов)
Согласен, что надо все учить, но вот вам аналогия: перед вами блюдо, вы его едите и тут кто-то ставит второе, тоже вкусное. Вы же не будете пытаться запихнуть его в рот, пока не прожевали то, что во рту. Вы можете не доев первое, начать второе, третье, но не одновременно, при этом, когда едите второе, первое в этот момент не едите. Так и с учебой, если сразу хвататься за все, то максимум "понадкусываете" со всех тарелок.

Aragaer
26.11.2018
09:45:08
я знаю людей, которые ставят перед собой суп и салат и закусывают суп салатом

эти разные знания не настолько разнородны, чтобы вот обязательно строго раздельно

Сергей
26.11.2018
09:50:33
Aragaer
26.11.2018
09:51:19
я вон себе на завтрак сегодня пожарил сосиски, грибы, яичницу и еще достал салат из капусты. Все по отдельности. Но ел вместе. И норм

Тимур
26.11.2018
09:52:28
Я ел только яйца, а на обед жаркое. Вот что это значит?

Aragaer
26.11.2018
09:52:43
что мало ешь

Роман
26.11.2018
09:52:51
а может 10 яиц было? :D

Tima
26.11.2018
09:53:00
Всем привет, по-скольку я еще не очень опытен в пайтоне спрошу, почему не рекомендуется использовать import *

Roman
26.11.2018
09:53:15
народ, не думаю, что ваши гастрономические предпочтения всем интересны :)

Tima
26.11.2018
09:53:38
Ахах

Tigran
26.11.2018
09:53:50
Всем привет, по-скольку я еще не очень опытен в пайтоне спрошу, почему не рекомендуется использовать import *
представь, ты читаешь код, а в нём используются какие-то функции и классы, которые ты понятия не имеешь откуда взялись

Roman
26.11.2018
09:54:09
Всем привет, по-скольку я еще не очень опытен в пайтоне спрошу, почему не рекомендуется использовать import *
потому что: 1. неявно 2. можно затереть имена 3. можно импортировать что-то лишнее

Сергей
26.11.2018
09:54:33
я знаю людей, которые ставят перед собой суп и салат и закусывают суп салатом
Эти люди называются гурманы. С их точки зрения это нормально, так же, как с нашей использовать в одной программе разные подходы. Но представьте пользователей в виде детей малых, если так все намешать, их желудочек может не выдержать :)

Google
Tima
26.11.2018
09:56:55
потому что: 1. неявно 2. можно затереть имена 3. можно импортировать что-то лишнее
Не понимаю третьего, ведь если я использую звездочку то я хочу импортировать все

Tishka17
26.11.2018
09:57:11
скажи хоть один кейс когда нужно импортировать всё?

Anton
26.11.2018
09:57:27
Tima
26.11.2018
09:57:36
Юнит тестирование

Да

Anton
26.11.2018
09:58:15
Тогда ваше право, ведь это лишь рекомендация. Но стоит тогда написать хорошие комменты

Tima
26.11.2018
09:58:38
Без них никак)

Alex
26.11.2018
09:59:03
тогда стоит импортировать модуль, а не все имена из модуля.

Crystal Melting Dot
26.11.2018
09:59:43
скажи хоть один кейс когда нужно импортировать всё?
Например когда пишешь модуль с GUI для своей программы и не хочешь по отдельности все виджеты импортировать или писать [modulename].[classname]

Crystal Melting Dot
26.11.2018
10:00:35
тогда импортируй используемые классы явно, в чем проблема?
В том, что используемых классов слишком много

Tishka17
26.11.2018
10:00:43
слишком много - сколько?

Crystal Melting Dot
26.11.2018
10:00:53
Ну почти все

Tishka17
26.11.2018
10:00:54
10? 20? 100?

если ты испортируешь 100, вероятно у тебя и сам файла 10000 строк

Alex
26.11.2018
10:01:13
Ну почти все
возможно стоит подумать над декомпозицией кода.

Страница 7157 из 9768