@ru_python

Страница 7209 из 9768
Aragaer
29.11.2018
05:42:39
и в этом месте рекурсия

Сергей
29.11.2018
05:43:38
ваще-т все сильно проще
напишите это в коде. То, что я написал - очень простой вариант, но рабочий

Aragaer
29.11.2018
05:44:38
примерно то же, что и у тебя там

Tishka17
29.11.2018
05:51:08
Зачем класс метод и замыкание, когда можно объект просто?

Google
Сергей
29.11.2018
05:53:08
если строка начинается с 11-19, 21-29 или 31-33, то у тебя есть два варианта - взять эти первые два символа и одну букву, либо же только один первый символ и продолжить
у меня просто создается словарь декодирования dict('1': 'a', '2': 'b',... '26': 'z'). Вариант c первой цифрой берется сразу (она добавляется в конец строки) и метод вызывается рекурсивно. Потом проверяется: если 2 первые цифры входят в список ключей словаря декодирования, то то же самое делается, только с 2 цифрами.

Зачем класс метод и замыкание, когда можно объект просто?
Почему вообще класс - я написал: чтобы избежать глобального списка. Почему классный метод? Не вижу смысла в создании инстанса класса только ради 1 функции декодирования

Tishka17
29.11.2018
05:55:06
Конечно, создать замыкание - намного читабельнее

Сергей
29.11.2018
05:57:29
Конечно, создать замыкание - намного читабельнее
Честно говоря никогда не понимал, почему замыкание - это так сложно. Ну мог я передавать этот список в рекурсивную функцию, но это только забивало бы стек вызовов.

Tishka17
29.11.2018
05:57:40
cls._code_str = code_str вот это вообще хорошо

Меняем не для инстанса, а для всего классе

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

У тебя какое-то замыкание и то не доделанное

фей
29.11.2018
05:59:39
Hello, World! Подскажите , плз, какой модуль импортировать, чтобы нарисовать, например, квадрат (или сетку) в квадрате?

Tishka17
29.11.2018
06:00:46
Тогда уж вот так: def decode(code_str: str)-> list: result_list=[] def decode_process(decode_begin: str, code: str): if not code: result_list.append(decode_begin) return decode_process((lambda x, y: x + cls._decode_key.get(y))(decode_begin, code[0]), code[1:]) if len(code) > 1 and code[:2] in cls._decode_key: decode_process((lambda x, y: x + cls._decode_key.get(y))(decode_begin, code[0:2]), code[2:]) decode_process('', code_str) return result_list

Сергей
29.11.2018
06:02:15
cls._code_str = code_str вот это вообще хорошо
я в посте с кодом уже написал, что эта строка не нужна. Это было скорее по привычке, но не понадобилось. Зачем декодер вызывать паралельно? Пример - всего лишь концепт, там для оптимизации есть ресурсы. И замыкание в этом виде используется лишь для того, для чего используется

Tishka17
29.11.2018
06:03:34
Да я не в курсе зачем. Просто хранить что-то в классе бэд практис. Одновременно юзать класс и замыкание - тоже. Делай или класс и храни в объекте. Или делай функцию с замыканием. Одновременно у тебя все намешано

Замыкание у тебя не используется, ты хранишь все равно в классе список

Google
SetazeR
29.11.2018
06:04:52
Я что-то туплю и не въезжаю, про какое замыкание речь?

рекурсия?

Tishka17
29.11.2018
06:06:03
Я что-то туплю и не въезжаю, про какое замыкание речь?
class X: @classmethod def calc(cls): def do(): cls.smth=1 do() return cls.smth Вот там грубо такой код

рекурсия?
Про функцию в функции

SetazeR
29.11.2018
06:07:07
всё равно не понял, ушёл в гугл образовывваться

Tishka17
29.11.2018
06:07:53
Сергей
29.11.2018
06:11:09
Решение в такой форме лишь потому, что по мере написания концепция менялась. Сначала это должен быть просто класс, потом подумал, что неудобно создавать класс ради всего 1 функции, переделал в классметод, потом понял, что с замыканием сделать проще. Из-за этого получился именно такой гибрид

Tishka17
29.11.2018
06:11:40
Ой да пожалуйста, просто так не делай больше и всё

Сергей
29.11.2018
06:12:02
обещаю :)

Iliya
29.11.2018
06:13:44
В общем у меня проблема, не моуг придумать решение У меня в папке /db/Engine-logs/ лежат логи, в этой папке раз в три минуты создается папка с именем устройсва и временем, например DEV1-2018-11-28-13:57:01 или DEV2-2018-11-28-13:00:02 устройст которые генерят логи как видно два. В этих папках с именем устройства и временем складываются gzip архивы с именем op-engine.1.log.gz op-engine.2.log.gz и тд до op-engine.10.log.gz Т.е. в каждой папке 10 gz архивов с логами. Мне надо брать каждый лог, открывать что-то вроде gzip.open(file_gz, 'rb') и парсить лог из архиват, обрабатывать инфу. Обработку я сделал и все ок, просто вытянул файл и оттестил. Но мне надо по кроду дергать скрипт, чтобы он например раз в 15 минут отрабатывал и парсил логи которые нагенерились за последее время. Основная проблема, не знаю как правильно обратиться к архиву с логом при всех условиях описаных выше.
Кто-нибудь может что-то подсказать? Основная непонятка, в том, чтобы правильно собрать путь к архиву, чтобы передать его в gzip.open()

Smirnov
29.11.2018
06:14:08
здравствуйте, не могу понять, как в sql запрос добавить переменную

я использую билиотеку pymysql

пишу типо такого

SetazeR
29.11.2018
06:15:36
стоп, декораторы - замыкания?

(но не наоборот)

Smirnov
29.11.2018
06:16:53
да фиг знает, я только недавно начал изучение, нашел в инете инфу. В пятницу нужно сдавать отчет, вот и не пойму.

сделал по аналогии и не фига не пашет

SetazeR
29.11.2018
06:17:42
@Tishka17

Google
SetazeR
29.11.2018
06:20:57
декораторы - частный случай замыканий?

синтаксис похож

SetazeR
29.11.2018
06:22:23
почитал, стало примерно понятно что за зверь, но пока не совсем ясен реальный юзкейс

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

Сергей
29.11.2018
06:24:06
Кто-нибудь может что-то подсказать? Основная непонятка, в том, чтобы правильно собрать путь к архиву, чтобы передать его в gzip.open()
Вам нужно хранить (например) в файле 2 значения: папку с последними архивами, что вы обработали, имя последнего архива в этот папке. При старте этот файл программой читается. Потом в список помещаются имена папок, которые на диске (с помощью стандартной функции). Список сортируется. Если последний обработанный архив - последний в папке, то берется следующая папка, если не последний, то та, на которой вы закончили. Далее создается список файлов в ней и обрабатывается, начиная с первого в первом случае, описанном выше или со следующего - во втором случае. Дошли до конца списка, записали имя последней обработанной папки и архива в файл и завершились

Tishka17
29.11.2018
06:28:17
почитал, стало примерно понятно что за зверь, но пока не совсем ясен реальный юзкейс
Обычно когда надо создать функцию с какой-нибудь логикой и не хочется выносить это на момент выполнения функции

Iliya
29.11.2018
06:28:26
os.path.join я уже советовал?
нет, пойду гляну :) забыл наверновчера написать, когда уточнил вопрос

Tishka17
29.11.2018
06:30:02
почитал, стало примерно понятно что за зверь, но пока не совсем ясен реальный юзкейс
https://github.com/Tishka17/dataclass_factory/blob/feature/speedup/dataclass_factory/parsers.py. Вот пример. Парсеры - функции. При создании парсера кое-что вычисляется. Можно было бы сделать без замыканий, получилось бы медленнее. Можно было бы на классах, но наверно тоже чуть медленнее было бы

Ещё вариант - каррирование

SetazeR
29.11.2018
06:34:13
это что, из области функционального программинга?

Tishka17
29.11.2018
06:34:56
Это когда из функции 2х переменных надо сделать функцию одной, например

SetazeR
29.11.2018
06:35:34
такой пример видел

у тебя там куча функций с функциями как аргументами

я к такому кунг-фу не привык

or rather python-fu

Tishka17
29.11.2018
06:38:19
Помню в школе спросил у преподавательницы как в паскале передать одну функцию в другую. Кажется мне не ответили :(

Google
SetazeR
29.11.2018
06:38:50
С тех пор ты вырос и показал им всем! :D

Сергей
29.11.2018
06:43:00
Помню в школе спросил у преподавательницы как в паскале передать одну функцию в другую. Кажется мне не ответили :(
В современном object Pascal есть тип procedure, им можно обозначить параметр функции или процедуры и передать куда то, где можно вызвать

Сергей
29.11.2018
06:45:59
Мне недавно пришлось помочь написать пару лаб на нём (лет 5 назад много писал), после питона - это какой то кошмар (в плане синтаксиса). Но за вечер вспомнил

Mr
29.11.2018
06:47:25
конечно хотелось бы чтоб кто-то тыкнул на ошибку в моем коде, ибо у меня от него уже рвотные позывы))

Admin
ERROR: S client not available

Mr
29.11.2018
06:49:49
Где этот код?
http://dpaste.com/1PDV4XP

M
29.11.2018
06:50:46
http://dpaste.com/1PDV4XP
А это для чего? global result

Tishka17
29.11.2018
06:51:06
Ты ещё спроси зачем в каждой строке temp1

Mr
29.11.2018
06:51:16
А это для чего? global result
да просто костыль временный, туда результаты пихаются

M
29.11.2018
06:51:27
Это же список.

SetazeR
29.11.2018
06:51:27
Тереееесно

Mr
29.11.2018
06:51:42
Tishka17
29.11.2018
06:51:43
Я в этих temp1 уже глаза сломал

Mr
29.11.2018
06:51:53
я тоже.

это уже в рамках отчаяния)

Tishka17
29.11.2018
06:52:09
да просто костыль временный, туда результаты пихаются
Глобальная переменная, чтобы отовсюду был доступ. Плохо, но в принципе работать должно

SetazeR
29.11.2018
06:52:39
Ты ещё спроси зачем в каждой строке temp1
class Test: foo: str bar: list Такие записи валидны в IDE до тех пор пока я на самом деле не пытаюсь что-либо делать с foo и bar до присвоения им значений

Google
Mr
29.11.2018
06:53:18
мне щас абсолютно насрать насколько плох сам код, оптимизацией займусь позже

а вот где ошибка понять бы хотелось определенно

SetazeR
29.11.2018
06:54:16
В смысле?
ну я почитал пример для твоего датакласс парсера

и нашёл там подобное в @датакласс

Tishka17
29.11.2018
06:54:46
мне щас абсолютно насрать насколько плох сам код, оптимизацией займусь позже
Невозможно понять когда код выгдядит как temp1=temp1(temp1+1) temp1.append(temp1) temp1()

и нашёл там подобное в @датакласс
Во-первых, декоратор датакласс важен в данном кейсе Во-вторых аннотации типов просто для подсказок в IDE обычно используются

https://habr.com/post/415829/

Mr
29.11.2018
06:57:25
Невозможно понять когда код выгдядит как temp1=temp1(temp1+1) temp1.append(temp1) temp1()
ну такого там нет, положим, но вот - почистил немного http://dpaste.com/2FCWCT8

SetazeR
29.11.2018
06:57:35
то-то я у тебя не нашёл определения

Tishka17
29.11.2018
07:03:33
ну такого там нет, положим, но вот - почистил немного http://dpaste.com/2FCWCT8
Мне кажется после if int(source[:2]) in range(10,27) ещё else должен быть

Aragaer
29.11.2018
07:03:59
не, не 10 27

потому что 20 и 30 не годятся

Aragaer
29.11.2018
07:04:35
а, там английский текст к тому же

Tishka17
29.11.2018
07:04:46
Кстати, а почему result.append(temp1+temp2), а два аппенда?

Aragaer
29.11.2018
07:05:03
справа, где 11+1, не должно быть ветки на 1+1+1

потому что уже взяли 11

и его уже не дробим

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