Archive for the ‘phyton’ Category
Python is Programming Language of the Year
Уже второй раз (говорят) Python стал завоевал титул “Programming Language of the Year“
range(stop+1)
Хочется, что-бы range(x) выдал последним значение х, а не х-1?
Пожалуйста
def inc_range(stop):
"""range() с включающей верхней границе (0-based)
>>> inc_range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>>"""
return(range(0, stop+1))
или для функционалов:
inc_range = lambda x: range(0,x+1,1)
Дальше можно баловаться со start и step — если надо
Хочу в Омск
Никто не едет? Я — очень хочу.
В Омске второй год подряд проводится конференция RuPyRu по Ruby и Python. В этом году она пройдет 21 июня.
Конференция рассчитана на людей, которые используют Ruby или Python в своей практике, либо просто интересуются новыми технологиями.
GAE
Ага! Многие уже успели отписаться по поводу GAE. А мне вот только пришло “одобрение”. Ну ничего, лучше поздно чем никогда…
Hello,
Thanks for signing up to try Google App Engine! Your account has been activated, so you can begin building applications!
To start creating applications with Google App Engine, simply follow this link (you may need to sign in with your Google Account):
http://appengine.google.com/
Thanks! The Google App Engine Team
Ну и что же мне сделать…
Django, Django и Django
А и правда — последнее время как-то очень много и часто стала упоминаться Django. То Google ее помянет в своем GAE, то Яндекс, вернее его девелоперы про джангу хорошо и много расскажут…
А вот на днях, наткнулся в своих подписках на еще одну рассказку о Джанге (//через блог Ивана Сагалаева). Довольно интересно, кстати. Спасибо за наводку.
P.S.
И да, мы тоже пользуемся Джангой. Начинаем. Изучаем. Нравится.
Декоратор для замеров
Несколько раз я слышал про декораторы. Но вот сущность их понять не мог… Ускользала она. До тех пор, пока не попробовал сделать один.
def execute_timing(func):
"""Функция-декоратор для замеров времени исполнения
Пример использования:
@execute_timing
def getSomeData(params):
...
Теперь, при вызове getSomeData в консоль будет выводиться
время ее выполнения. Убрав декоратор - убираем и замер."""
def wrapper(*arg, **kwargs):
t1 = time.time()
res = func(*arg, **kwargs)
t2 = time.time()
print '%s done in %0.3f ms' % (func.func_name, (t2-t1)*1000)
return res
return wrapper
Осталось еще только попробовать воспользоваться декоратором для расширения уже написанных функций и будет совсем понятно. Хотя уже и сейчас я их понял достаточно, что-бы иногда использовать.
добавлено:
как оказалось, декоратор хорош, но не всегда
после небольшой правки он заработал уже везде (где я его использую). Проблема заключилась в том, что wrapper(), вернее оборачиваемая им функция, недополучал аргументов. Добавление **kwargs решило проблему. Подправленный код можно посмотреть выше.
Python: switch
Простая ситуация: нужно вызвать одну из нескольких функций, в зависимости от некоторого параметра. Знакомо и просто:
switch (x) {
case '1':
//bla-bla-bla;
break;
default:
//default bla-bla-bla;
}
Поехали… Хм, не тут то было… Оказалось, что у Python’а нет switch/case конструкции (ну да, я пользую питон не так давно
). В PEP 275 даже подробно рассказано почему. И предлагается использовать последовательности if..elif. Ну можно конечно и так – но как-то не красиво. И вот после некоторого чесания затылка, нашлось красивое решение — по крайней мере мне оно таковым кажется:
observers = {'start': tocis_svc.startJob,
'finish': tocis_svc.finishJob,
'pause': tocis_svc.pauseJob}
try:
observer = observers[request.GET['action']]
except KeyError:
return HttpResponse("{succes:false,error:'Таких манипуляций над работами не проводится. Извините.'}")
И пожалуй, это даже более красиво чем switch..case. По крайней мере в том случае, если вам нужно не написать много кода внутри case’а (что есть не очень), а вызвать некий обработчик в зависимости от значения переменной/выражения.
Code-folding. TextMate.
Есть такая штука – сворачивание кода. Можно ее любить, можно не любить. Я к ней отношусь по разному. То, что обычно предлагают разные редакторы (и [TextMate][1] не исключение) – сворачивание по разного рода конструкциям языка, типа пар {}, <div></div> и т.д. – меня не устраивало и я просто этим не пользовался. И всегда хотелось (ну не всегда…) свернуть код так, как хочется тебе… Но обычно это не настраивалось и/или возиться было лень.

