Как стать автором
Обновить
0
0
sash_ko @sash_ko

Пользователь

Отправить сообщение
Как-то не очень с исключениями. Во-первых, except и сразу return может стоить вам многих часов, разбираясь почему «оно» не работает как как надо. Во-вторых, при работе с потоками (thread'ам), важно помнить две вещи — поток должен сам перехватывать свои собственные исключения и acquire/release должны быть обернуты try/finally или lock подсовывать with'у. Если write_to_file бросит исключение при открытии файла, будет и дедлок и необработанное иключение. Кстати print для иключения далеко не самый лучший индикатор, logging.exception поинформативней будет.

И еще, ENCODING то используется, то не используется.
Не феншуйно читать комментарии, написанные под строкой, к которой они относятся. Обычно они сверху или в той же строке (pep8) и к этому все привыкли.

подозреваю, что 15 гиг памяти хавается как раз, что бы избежать дополнительного io
Время вычисления хеша на порядок меньше времени «пиклизации» (несложно написать 3 строки и убедиться в этом), так что это не создаст большую проблему, а экономия памяти будет значительная. Кстати, если передаваемые аргументы имеют большой размер, то сложность вычислений bigfunc должна быть больше, чем dumps, что бы вообще имела смысл меморизация.
Интересный способ, а что если уменьшить потери памяти за счет использования функции hash():

key = hash( cPickle.dumps((args, sorted(kwargs.iteritems()))) )

Если использовать filecmp, то задачу можно решить проще, используя filecmp.dircmp. Он за вас всю работу сделает, вам понадобится только отфильтровать (что бы не показывать .pyc) left_only или right_only и diff_files.
Хотя бы тем, что в механизм итераторов built-in в Python. В С++ для итераторов нужны доплнительные либы. Если в проекте не используется STL (довольно распространенное явление), прийдется изобретать свои велосипеды (контейнеры и итераторы).
Код можно сделать плохо читаемым и самыми «простыми» средствами, например, вложенными циклами :)

Если применять вышеперечисленные структуры без фанатизма, проблем не возникает и код становиться более компактным. Можно посмотреть стандартные библиотеки, там не так много, но есть. Зато часто используется lambd'ы и замыкания для отложенных вычислений. Соответственно, используются функции высшего порядка.
«медленно» — это понятие относительное
На rsdn'e есть хорошая статья «Функциональное программирование для всех»: rsdn.ru/article/funcprog/fp.xml
Функции первого, второго и т.д. порядков — это терминология из ФП или «самоназвание»? Обычно в документации упоминаются только функции высшего порядка. Может стоит определиться уточнить термины, что бы не было путаницы?

Кстати, гугл тоже ничего не знает о ваших функциях :)
>> shifter, x_scaler, y_scaler, combine — это функции второго порядка, т.к. они принимают не только скалярные аргументы, но и другие функции

Вроде как, функции, которые принимают как параметры другие функции, называются функциями высшего порядка. Функции второго порядка это тоже самое что функции высшего порядка?

>> дока кривая до ужаса

Не наговаривайте на PIL, у нее вполне доходчивая и адекватная дока, можно даже не читать текст, что бы понять, как выполняются элементарные операции типа рисования примитивов, обрезания, слияния, геометрических трансформаций ;)
успехов :) интересно, вы быстрее разгадаете алгоритм или одноклассники осознают тупость такого метода?
кстати, можно организовать математический конкурс: «Разгадай алгоритм сокрытия идентификатора профайла одноклассников»
как теперь сервис будет работать, после того, как жадноклассники сделали айдишник пользователей динамическим? разгадывать алгоритм не пробовали?
одноклассники закрыли «дыру» — сделали динамические айдишники пользователей. теперь вы хрен где укажите ссылку свой профайл, что есть дополнительным для них трафиком. так что они сами себе вставляют палки в колеса…
упс, текст который за выводом не заметил :)
возник только один вопрос: зачем это все надо?
Если так важно получить объект, ему можно присвоить имя (у QObject есть свойство objectName) и затем использовать функции типа findChild или findChildren
«При каждом проходе цикла создается переменная button и уничтожается...» — важна не переменная, а объект, на который она ссылается. button — это только ссылка на объект класса QPushButton. В строке 23 видно, что buttons_layout тоже хранит ссылку на этот объект. Поэтому совершенно не важно, будет ли уничтожена переменная или нет (вторая ссылка останется и сборщик мусора может спать спокойно). Кстати, не факт, что переменная уничтожается при каждом проходе цикла, это не C++ :)
1

Информация

В рейтинге
Не участвует
Откуда
Украина
Дата рождения
Зарегистрирован