
Dark
20.11.2018
09:13:19

Олег
20.11.2018
09:13:22

damiurg
20.11.2018
09:14:11

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

Google

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

Maxim robox
20.11.2018
09:15:10

damiurg
20.11.2018
09:15:13

SetazeR
20.11.2018
09:16:03
я использоваЛ либу pytlegrambotapi
там можно указать конкретно проксик, через который уже все дальнейшие реквесты идут

damiurg
20.11.2018
09:16:42

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)


Сергей
20.11.2018
10:01:45
Можно еще сократить, если убрать проверку "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)
В данном случае я просто перестраховался, чтобы зря не открывать файл. Даже если цифры после буквы не будет, ничего не запишется, потому что 'a' * 0 = ''

Куча
20.11.2018
10:02:36

Tishka17
20.11.2018
10:06:26
как-то так

?? 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

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

Tishka17
20.11.2018
10:08:18

?? 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

hachiman
20.11.2018
10:11:15

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

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

?? Eugene
20.11.2018
10:16:03

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

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
попробуй не передавать строку параметром

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

Tishka17
20.11.2018
10:32:54

?? Eugene
20.11.2018
10:33:15
все-равно джойн быстрей

Tishka17
20.11.2018
10:34:29

?? 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
все понятно