@ru_python

Страница 7102 из 9768
Олег
20.11.2018
09:13:22
погугли мне)
B= np.split(A, np.where(A[:, 0]== 0.)[0][1:])

damiurg
20.11.2018
09:14:11
я тебе говорю юзать другой прокси-сервер для обращения к телеге блджад
я пытался другой обычный SOCKS-прокси. не завелось. (

SetazeR
20.11.2018
09:14:31
ты делаешь что-то не так значит

Google
SetazeR
20.11.2018
09:14:46
тот же pytelegrambotapi спокойно через носки гуляет

damiurg
20.11.2018
09:15:13
ты делаешь что-то не так значит
а ты использовала конструкцию requests.post или как-то иначе?

SetazeR
20.11.2018
09:16:03
я использоваЛ либу pytlegrambotapi

там можно указать конкретно проксик, через который уже все дальнейшие реквесты идут

damiurg
20.11.2018
09:16:42
я использоваЛ либу pytlegrambotapi
ок, спасибо, попробую.

SetazeR
20.11.2018
09:16:59
это bot api либа если чё

не клиентского апи

damiurg
20.11.2018
09:19:39
не клиентского апи
т.е. прокси прикручивается на стороне Бота?

SetazeR
20.11.2018
09:19:52
естессно

damiurg
20.11.2018
09:20:41
естессно
хм, интересно )

естессно
если я правильно понимаю, то локально надо поднимать прокси, прописывать его на боте через библиотеку pytelegrambotapi но тогда, как я предполагаю, придётся пропиливать порт на рутере для входящих на проксю, так? либо использовать сторонний прокси?

SetazeR
20.11.2018
09:46:56
сторонний

Google
SetazeR
20.11.2018
09:47:19
локально ты если поднимешь - это не даст никакого эффекта если твоё "локально" всё ещё в пределах РФ

Куча
20.11.2018
09:59:21
Чуть покороче with open('dataset_3363_2.txt', 'r') as f_inp: something = f_inp.read(1) while something.strip('\n'): symbol_now = something print('symbol_now =', symbol_now) something = f_inp.read(1) nums = 0 while something.strip('\n').isdigit(): nums = nums * 10 + int(something) something = f_inp.read(1) print('nums =', nums) if nums != 0: with open('f_out.txt', 'a') as f_out: f_out.write(symbol_now * nums)
Можно еще сократить, если убрать проверку "if nums != 0". Дело в том, что для нас достоверно известно, что nums всегда будет больше чем ноль, так что проверка не требуется исходя из условий. Еще убрал print'ы, так как это было чисто для себя, чтобы видеть промежуточные результаты. Типа для отладки. with open('dataset_3363_2.txt', 'r') as f_inp: something = f_inp.read(1) while something.strip('\n'): symbol_now = something something = f_inp.read(1) nums = 0 while something.strip('\n').isdigit(): nums = nums * 10 + int(something) something = f_inp.read(1) with open('f_out.txt', 'a') as f_out: f_out.write(symbol_now * nums)

?? Eugene
20.11.2018
10:07:02
ух, конкатенация строк в цикле

Tishka17
20.11.2018
10:07:30
ух, конкатенация строк в цикле
а чего нет? у нас чай не джава

?? Eugene
20.11.2018
10:07:55
а чего нет? у нас чай не джава
тем не менее, на каждой итерации выделяется память под новую строку

Куча
20.11.2018
10:08:08
symbol = None nums = "" res = "" for x in input(): if x.isdigit: nums += x else: symbol = x if nums: res += symbol*int(nums) nums = ""
Так ведь тут нет работы с файлом. Это уже не то. Если подставите работу с файлом, то получите примерно то же, что я раньше делал.

?? Eugene
20.11.2018
10:08:13
а питон память не возвращает операционной системе

?? Eugene
20.11.2018
10:08:37
нет
а как?

Tishka17
20.11.2018
10:09:54
а как?
щас найду пруф. Но в питоне не просто так нету stringbuilder

как в джаве

Ssi
20.11.2018
10:10:59
нет
Так ведь на каждый += выделяется новый кусок памяти под новую строку

?? Eugene
20.11.2018
10:11:02
щас найду пруф. Но в питоне не просто так нету stringbuilder
Ну погоди, а как происходит конкатенация по-твоему?

Tishka17
20.11.2018
10:11:22
?? Eugene
20.11.2018
10:11:23
Как я понимаю, += выделяет новый кусок памяти для двух строк и помещает туда новую строку

Google
Tishka17
20.11.2018
10:11:45
он вполне может расширять память

realloc никто не отменял

?? Eugene
20.11.2018
10:12:03
а вот не факт что может

I
20.11.2018
10:12:06
Tishka17
20.11.2018
10:12:15
I
20.11.2018
10:12:58
он вполне может расширять память
Не расширяет память, поэтому есть join вместо stringbuilder

Alex
20.11.2018
10:15:05
щас найду пруф. Но в питоне не просто так нету stringbuilder
раньше это и правда было проблемой и рекомендовали использовать join

с какой-то версии еще 2.x конкатенацию строк очень сильно оптимизировали

Alex
20.11.2018
10:16:57
Не помнишь как именно?
я это уже очень давно читал. вот что быстро нагуглилось на этот счет http://blog.mclemon.io/python-efficient-string-concatenation-in-python-2016-edition

сейчас сам читаю эту статью

Tishka17
20.11.2018
10:20:35
https://habr.com/company/mailru/blog/337364/#optimizacii-interpretatora-konkatenacii-strok вот ещё есть

короче быстрее только если уже есть список конторый надо контактенировать

?? Eugene
20.11.2018
10:27:16


Alex
20.11.2018
10:27:27
короче быстрее только если уже есть список конторый надо контактенировать
эта оптимизация работает, если ты промежуточное состояние строки нигде не используешь. условие ресайза строки - количество ссылок на нее равное 2 (1 твой объект и еще +1 во время += создается)

Tishka17
20.11.2018
10:28:09
ага

?? Eugene
20.11.2018
10:28:26
Ну да, если нужны промежуточные состояния - join не поможет

Tishka17
20.11.2018
10:29:45
у тебя уже готовый chars как раз, а если ты символ на каждой итерации откуда-то генерируешь, это уже не сработает

Alex
20.11.2018
10:29:57
Ну да, если нужны промежуточные состояния - join не поможет
в твоем примере ты строку передаешь параметром в функцию, из-за этого возникает переаллокация в первый раз. на размере ascii_letters это вероятно заметно

попробуй не передавать строку параметром

Google
Tishka17
20.11.2018
10:30:18
кстати тоже

Alex
20.11.2018
10:31:02
хотя там строка нулевой длины.

Tishka17
20.11.2018
10:31:05
хотя имхо не должно влиять, если только на первую итерацию

Alex
20.11.2018
10:32:02
хотя имхо не должно влиять, если только на первую итерацию
как бы с учетом того что функция делает всего 52 итерации, на большом количестве вызовов самой функции это может быть заметно

?? Eugene
20.11.2018
10:33:15


все-равно джойн быстрей

Tishka17
20.11.2018
10:34:29
все-равно джойн быстрей
а теперь сделай джойн когда ты символ откуда-то читаешь. Например 100 раз один и тот же

?? Eugene
20.11.2018
10:34:53
джойн все-равно дождется пока итератор не опустошится, и только потом выделит память и создаст строку

Tishka17
20.11.2018
10:36:00
ну говорю, же сделай генератор, который генерирует 100 символов одинаковых

?? Eugene
20.11.2018
10:36:11
а, ну ща

Tishka17
20.11.2018
10:36:12
без аллокации

?? Eugene
20.11.2018
10:36:32
точно, ты прав



как так, у тебя 18 наносек, а у меня 18 милисек ;D

Tishka17
20.11.2018
10:42:45
микро

в обоих

Google
?? Eugene
20.11.2018
10:43:17
микро, да

Alex
20.11.2018
10:43:36
микро, да
потому что у тебя на каждый вызов функции создание генератора, наверное

Tishka17
20.11.2018
10:43:43
это кстати тоже

Alex
20.11.2018
10:43:47
а я обхожу предварительно аллоцированный массив

и тестирую только непосредственно конкатенацию и джойн

Tishka17
20.11.2018
10:44:06
ну реальный кейс - когда нет предварительно аллоцированного

?? Eugene
20.11.2018
10:44:11
все понятно

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