Ноу хау - от мастеров на заметку » Страница 2

-

Программирование на Python



JOIN_ME


репутация:
на сайте с 1970 года
сообщений:

#11

А смысл?
-------------
добавлено в 17.14: поясняю мое легкое возмущение - оператор лямбда создает безымянный объект-функцию. А ты его в переменную сохраняешь. Не логично. Да еще и скорость у лямбды ниже.

Virtuos86


репутация: 101
на сайте с 2008 года
сообщений: 802

где-то в России

#12

JOIN_ME, наполовину согласен, наполовину нет smile.

Согласен, что если копия будет с тем же именем ниже по тексту, то она просто заменит функцию. Это хорошее уточнение идеи, спасибо.

Но под какое такое новое имя нужно будет подстраивать код?

Допустим есть функция foo.

Под новым именем fooX будет храниться исходный вариант функции, который трогать и не надо. А изменяться будет сама функция foo, которая используется в программе.

==========

Можно уточнить: я советую переименовывать функцию, а ниже писать её новый вариант.


watt


репутация:
на сайте с 1970 года
сообщений:

#13

Andre-4667, есть еще

sys.setdefaultencoding("utf-8")
unicode("Привет")
и ходи по улице осторожней, за каждым углом могут оказаться плохие парни, они тебя отучат безимянные функции мучать smile

Krust


репутация:
на сайте с 1970 года
сообщений:

#14

Andre-4667, там ещё можно режим добавить. ''.decode('u8', errors), где errors может быть 'strict' (по умолчанию. Создает исключение при ошибке. Иногда позволит авто-подобрать кодировку в try-except ), 'ignore'(игнорировать ошибки. Shrim часто грешил winked ), 'replace' (заменять ошибочные символы. Как это xplore делает), 'xmlcharrefreplace'... Но лучше почитайте об этом Сузи-обработка текстов, иначе один фиг это слишком поверхностно.

JOIN_ME


репутация:
на сайте с 1970 года
сообщений:

#15

watt,

в кэпке и с семачками =)

А можно еще так заморочиться

import appuifw

appuifw.note('\x1f\x04@\x048\x042\x045\x04B\x04!\x00')

где строка закодирована в utf-16le. =)

Virtuos86


репутация: 101
на сайте с 2008 года
сообщений: 802

где-то в России

#16

Интересно, раньше нигде не встречал.
Оказывается, appuifw.popup_menu может как и листбокс принимать не только список строк типа u"item", но и список пар строк вида (u"item", u"description").

from appuifw import popup_menu

popup_menu([(u'item 0', u'description'), (u'item 1', u'description'), (u'item 2', u'description')], u'Label')

Одно огорчает - белая полоса внизу экрана. Но, кажется, этот глюк проявляется только на осях выше 9.1. У меня и листбокс в полном режиме тоже отображается с белой полосой внизу. На 3250 такого никогда не было.

dimy44


репутация: 537
на сайте с 2006 года
сообщений: 2540

HTC One S

Евпатория

Возраст - 53

#17

До 'мастеров' мне далеко), но вот... Недавно на ночь глядя бился с одной фигней. Но время потратил не зря! Открыл для себя новые возможности Питона. Если об этом знали все, кроме меня, не пинайте.
>>> 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
>>>

Krust


репутация:
на сайте с 1970 года
сообщений:

#18

Цитата из 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

Krust


репутация:
на сайте с 1970 года
сообщений:

#19

Хочу предупредить об очень неприятном баге модуля akntextutils.

Если в конце текста есть пробел, размеры которого меньше для того чтоб занять целую строку, функция модуля просто его игнорирует. Если размер пробела вконце больше размера строки хоть во сколько раз, функция модуля пишет в свой кортеж просто одну u' вконец.

Если важна точность, проверяйте количество пробелов вконце текста spaces=len(text)-len(text.rstrip())

SanchO-SEK


репутация: 0
на сайте с 2009 года
сообщений: 1

Nokia 3250

Днепропетровск (Украина)

Возраст - 34

#20

Во многих скриптах (в основном на PHP) приходилось наблюдать примерно следующее извращение:

if x==1: print 'One'
elif x==2: print 'Two'
...
и т.д. (пример набросан "от фонаря", чтобы только передать суть).
Товарищи начинающие программисты, помните, что такты процессора гораздо дороже памяти. Дешевле и логичней делать так:

list = ['One', 'Two']
print list[x]
===
Даже без тестов понятно что лучше потратить десятки байт памяти, чем процессорное время, расходуемое на разбор условий


Яндекс.Метрика