А мой вариант обыграть не пробовали? У меня проблем с рекурсией нету. Она закончится если при сканировании попадется вложенность папок более 1000, а это уже маловероятно. И еще - там где не хватает рекурсии, надо заюзать цикл. Типа до: def x(): . x() типа после: while 1: . x() в данном примере как вариант можно так закрутить (как я понял lst это список папок): while lst: . _scan(lst.pop(0))
Хм. Нет у меня 1000. Вот незатейливый тест: t = -1 def a(): . . . . global t . . . . t += 1 . . . . open('D:\\recursion_test', 'w').write('recursion_test: %d' %t) . . . . a() a() у меня 235 вызовов ------------- добавлено в 12.45: JOIN_ME, твой способ пробовал, там кстати путь слэшами должен заканчиваться, выдало индексэррор, далее углубляться не стал че да как там, решил тогда свой сделать...
Хм. Нет у меня 1000. Вот незатейливый тест:t = -1def a():. . . . global t. . . . t += 1. . . . open('D:\\recursion_test', 'w').write('recursion_test: %d' %t). . . . a()a()у меня 235 вызовов -------------добавлено в 12.45: JOIN_ME, твой способ пробовал, там кстати путь слэшами должен заканчиваться, выдало индексэррор, далее углубляться не стал че да как там, решил тогда свой сделать...
Вообще-то не очень удачная идея делать тест с I/O (вводом/выводом). Тут на нём весь оверхед получается, ИМХО.
Как известно для реализации меню appuifw.app.menu необходимо в эту переменную передать список кортежей вида (u'Заголовок', функция). Частой проблемой я вляется передача аргумента в данную функцию. Например: аppuifw.app.menu = [(u'Menu1', func(1)), (u'Menu2', func(2))] Все это легко решается с помощью lambda, но мне пришла идея задействовать фабрику функций (в соседней теме вспомнил об этой фиче). Примерно так: 1) переделываем функцию из например def func(x): . print x в такую def func(x): . def fx(): . . print x . return f x и теперь запись аppuifw.app.menu = [(u'Menu1', func(1)), (u'Menu2', func(2))] будет прекрасно выполняться. Чтото особо полезного здесь нет, зато эстетичнее кучи лямбд и читабельнее.
В последнее время все чаще замечаю, что много народу строит интерфейс программ на питон 1.4.х., применяя popup_menu либо selection_list. В угоду сенсорам, или еще по другим причинам. При этом их нисколько не заботит, что, скажем подпись правого софта "Назад" или "Отмена", хотя там по сути выход, итп. В прикрепленном файле пример, как поставить свои подписи на софтклавиши (подстмотрел реализацию в appuifw2.py). П.С. Виртуоз раньше пример подобный писал, но несколько иначе.
def love(num): if len(str(num)) >= 2 and str(num)[-2] == '1': end = 'пар' else: if str(num)[-1] in ['2', '3', '4']: end = 'пары' elif str(num)[-1] in ['0', '5', '6', '7', '8', '9']: end = 'пар' else: end = 'пара' print 'На нашем сайте нашли друг друга %s %s'%(num, end)
>>> love(1) На нашем сайте нашли друг друга 1 пара >>> love(11) На нашем сайте нашли друг друга 11 пар >>> love(4254) На нашем сайте нашли друг друга 4254 пары >>>
def love(num): if num > 10 and num < 20: end = 'пap' else: last = divmod(num, 10)[1] if last in (2, 3, 4): end = 'пapы' elif last == 1: end = 'пapa' else: end = 'пap' return end