Как-то не очень с исключениями. Во-первых, except и сразу return может стоить вам многих часов, разбираясь почему «оно» не работает как как надо. Во-вторых, при работе с потоками (thread'ам), важно помнить две вещи — поток должен сам перехватывать свои собственные исключения и acquire/release должны быть обернуты try/finally или lock подсовывать with'у. Если write_to_file бросит исключение при открытии файла, будет и дедлок и необработанное иключение. Кстати print для иключения далеко не самый лучший индикатор, logging.exception поинформативней будет.
И еще, ENCODING то используется, то не используется.
Время вычисления хеша на порядок меньше времени «пиклизации» (несложно написать 3 строки и убедиться в этом), так что это не создаст большую проблему, а экономия памяти будет значительная. Кстати, если передаваемые аргументы имеют большой размер, то сложность вычислений bigfunc должна быть больше, чем dumps, что бы вообще имела смысл меморизация.
Если использовать filecmp, то задачу можно решить проще, используя filecmp.dircmp. Он за вас всю работу сделает, вам понадобится только отфильтровать (что бы не показывать .pyc) left_only или right_only и diff_files.
Хотя бы тем, что в механизм итераторов built-in в Python. В С++ для итераторов нужны доплнительные либы. Если в проекте не используется STL (довольно распространенное явление), прийдется изобретать свои велосипеды (контейнеры и итераторы).
Код можно сделать плохо читаемым и самыми «простыми» средствами, например, вложенными циклами :)
Если применять вышеперечисленные структуры без фанатизма, проблем не возникает и код становиться более компактным. Можно посмотреть стандартные библиотеки, там не так много, но есть. Зато часто используется lambd'ы и замыкания для отложенных вычислений. Соответственно, используются функции высшего порядка.
Функции первого, второго и т.д. порядков — это терминология из ФП или «самоназвание»? Обычно в документации упоминаются только функции высшего порядка. Может стоит определиться уточнить термины, что бы не было путаницы?
Кстати, гугл тоже ничего не знает о ваших функциях :)
>> shifter, x_scaler, y_scaler, combine — это функции второго порядка, т.к. они принимают не только скалярные аргументы, но и другие функции
Вроде как, функции, которые принимают как параметры другие функции, называются функциями высшего порядка. Функции второго порядка это тоже самое что функции высшего порядка?
Не наговаривайте на PIL, у нее вполне доходчивая и адекватная дока, можно даже не читать текст, что бы понять, как выполняются элементарные операции типа рисования примитивов, обрезания, слияния, геометрических трансформаций ;)
успехов :) интересно, вы быстрее разгадаете алгоритм или одноклассники осознают тупость такого метода?
кстати, можно организовать математический конкурс: «Разгадай алгоритм сокрытия идентификатора профайла одноклассников»
одноклассники закрыли «дыру» — сделали динамические айдишники пользователей. теперь вы хрен где укажите ссылку свой профайл, что есть дополнительным для них трафиком. так что они сами себе вставляют палки в колеса…
Если так важно получить объект, ему можно присвоить имя (у QObject есть свойство objectName) и затем использовать функции типа findChild или findChildren
«При каждом проходе цикла создается переменная button и уничтожается...» — важна не переменная, а объект, на который она ссылается. button — это только ссылка на объект класса QPushButton. В строке 23 видно, что buttons_layout тоже хранит ссылку на этот объект. Поэтому совершенно не важно, будет ли уничтожена переменная или нет (вторая ссылка останется и сборщик мусора может спать спокойно). Кстати, не факт, что переменная уничтожается при каждом проходе цикла, это не C++ :)
И еще, ENCODING то используется, то не используется.
key = hash( cPickle.dumps((args, sorted(kwargs.iteritems()))) )
Если применять вышеперечисленные структуры без фанатизма, проблем не возникает и код становиться более компактным. Можно посмотреть стандартные библиотеки, там не так много, но есть. Зато часто используется lambd'ы и замыкания для отложенных вычислений. Соответственно, используются функции высшего порядка.
Кстати, гугл тоже ничего не знает о ваших функциях :)
Вроде как, функции, которые принимают как параметры другие функции, называются функциями высшего порядка. Функции второго порядка это тоже самое что функции высшего порядка?
Не наговаривайте на PIL, у нее вполне доходчивая и адекватная дока, можно даже не читать текст, что бы понять, как выполняются элементарные операции типа рисования примитивов, обрезания, слияния, геометрических трансформаций ;)
кстати, можно организовать математический конкурс: «Разгадай алгоритм сокрытия идентификатора профайла одноклассников»