- Главная
- Форум
- Программирование
- Программирование на Python
- Ноу хау - от мастеров на заметку » Страница 2
Ноу хау - от мастеров на заметку » Страница 2
-Программирование на Python
JOIN_ME, наполовину согласен, наполовину нет .
Согласен, что если копия будет с тем же именем ниже по тексту, то она просто заменит функцию. Это хорошее уточнение идеи, спасибо.
Но под какое такое новое имя нужно будет подстраивать код?
Допустим есть функция foo.
Под новым именем fooX будет храниться исходный вариант функции, который трогать и не надо. А изменяться будет сама функция foo, которая используется в программе.
==========
Можно уточнить: я советую переименовывать функцию, а ниже писать её новый вариант.
Andre-4667, там ещё можно режим добавить. ''.decode('u8', errors), где errors может быть 'strict' (по умолчанию. Создает исключение при ошибке. Иногда позволит авто-подобрать кодировку в try-except ), 'ignore'(игнорировать ошибки. Shrim часто грешил ), 'replace' (заменять ошибочные символы. Как это xplore делает), 'xmlcharrefreplace'... Но лучше почитайте об этом Сузи-обработка текстов, иначе один фиг это слишком поверхностно.
Интересно, раньше нигде не встречал.
Оказывается, appuifw.popup_menu может как и листбокс принимать не только список строк типа u"item", но и список пар строк вида (u"item", u"description").
popup_menu([(u'item 0', u'description'), (u'item 1', u'description'), (u'item 2', u'description')], u'Label')
Одно огорчает - белая полоса внизу экрана. Но, кажется, этот глюк проявляется только на осях выше 9.1. У меня и листбокс в полном режиме тоже отображается с белой полосой внизу. На 3250 такого никогда не было.
До 'мастеров' мне далеко), но вот... Недавно на ночь глядя бился с одной фигней. Но время потратил не зря! Открыл для себя новые возможности Питона. Если об этом знали все, кроме меня, не пинайте.
>>> def foo(x, y, z):
print x
print y
print z
>>> foo(*('a', 'b', 'c'))
a
b
c
>>> foo(*['a', 'b', 'c'])
a
b
c
#а это watt 'расследовал:
>>> foo(**{'x':'a', 'y':'b', 'z':'c'})
a
b
c
>>>
Цитата из wiki по этому поводу (функция apply ):
>>>def f(x, y, z, a=None, b=None):
... print x, y, z, a, b...
>>>apply(f, [1, 2, 3], {'a': 4, 'b': 5})
12345
В последних версиях Питона вместо функции apply() можно применить специальный синтаксис (в продолжение примера выше):
>>>f(*[1, 2, 3], **{'a': 4, 'b': 5})
12345
Хочу предупредить об очень неприятном баге модуля akntextutils.
Если в конце текста есть пробел, размеры которого меньше для того чтоб занять целую строку, функция модуля просто его игнорирует. Если размер пробела вконце больше размера строки хоть во сколько раз, функция модуля пишет в свой кортеж просто одну u' вконец.
Если важна точность, проверяйте количество пробелов вконце текста spaces=len(text)-len(text.rstrip())
Во многих скриптах (в основном на PHP) приходилось наблюдать примерно следующее извращение:
if x==1: print 'One'
elif x==2: print 'Two'
...
и т.д. (пример набросан "от фонаря", чтобы только передать суть).
Товарищи начинающие программисты, помните, что такты процессора гораздо дороже памяти. Дешевле и логичней делать так:
list = ['One', 'Two']
print list[x]
===
Даже без тестов понятно что лучше потратить десятки байт памяти, чем процессорное время, расходуемое на разбор условий
- «
- 1
- 2
- 3
- --
- 8
- 9
- »