Статьи с тегом python2.x
Python tips & tricks
Недавно прочитал книгу Марка Лутца "Learning Python", 5-ое издание. Привожу список самых интересных фишек (по моему мнению) оттуда, что-то вроде конспекта.
-
генерация set'a:
{x for x in [1,2]} set(x for x in [1,2]) assert set(x for x in [1,2]) == {x for x in [1,2]}
-
генерация dict'а:
{x:x**2 for x in [1,2]} dict((x, x**2) for x in [1,2]) assert {x:x**2 ...
Python logging на каждый день
В процессе написания программы, скрипта, часто бывает нужно вывести какую-либо отладочную информацию или сообщить о каком-то событии. Известно, что для этих целей есть встроенный модуль logging. Однако обычно у меня бывает так: времени в обрез, а все эти настройки логов (handlers, loggers, formatters и пр.) никак не могу запомнить, и на скорую руку вставляю просто print. Потом, если скрипт используется часто или его надо отдать заказчику - хочется чтобы все эти сообщения записывались в файл ...
Форматирование unicode строк
Вы знали, что если одно из значений строкового выражения с оператором %
- unicode, то вся результирующая строка будет тоже unicode?
>>> "Hello, %s" % u"Alex"
u'Hello, Alex'
>>> "Hello, %s" % u"Алексей"
u'Hello, \u0410\u043b\u0435\u043a\u0441\u0435\u0439'
Я привык пользоваться методом .format
для форматирования строк и его поведение мне больше нравится: тип исходной строки всегда сохраняется, а если в качестве параметра даются не ascii символы, то возбуждается исключение UnicodeEncodeError
.
>>> "Hello, {0}".format(u ...
Парсинг url'а, содержащего unicode параметры, используя urlparse.parse_qs
Задача: получить словарь параметров URL'a. Например, имеем адрес:
http://example.com/?key=value&a=b
и нужно получить такой словарь:
{'key': ['value'], 'a': ['b']}
Тут значения являются списками, т.к. у одного ключа может быть несколько значений:
In: http://example.com/?key=value&a=b&a=c
Out: {'key': ['value'], 'a': ['b', 'c']}
В python'е для этих целей есть функция urlparse.parse_qs
, которая делает следующее:
>>> import urlparse
>>> query = "key=value&a=b"
>>> urlparse ...
Функции с изменяемыми значениями по умолчанию в python'e
В python'е значения функции по умолчанию создаются в момент выполнения инструкции def
, а не при каждом вызове функции. Если значение - неизменяемый объект (например строка, целое число, кортеж), то никаких подводных камней здесь нет. А вот если объект изменяемый (например список), то есть возможность попасть в ловушку. Вот пример:
def foo(l=[]):
l.append('x')
return l
Казалось бы, при каждом вызове foo() будет возвращаться список ['x']. Но:
>>> foo()
['x']
>>> foo()
['x', 'x']
>>> foo()
['x ...
Скрипт для скачивания музыки вконтакте
Беглый поиск соответствующего скрипта на python'е не дал результов. В статье на хабре ссылка не работает. Решил написать свой велосипед, он доступен здесь.
Запуск (нужен установленный python интерпретатор):
python vkcom_audio_download.py
Проверял на python 2.6 и 2.7. Никаких дополнительных библиотек не требуется.
Принцип работы:
Скрипт проверяет сохраненный access_token. Если его нет или срок истек, то открывается страница в браузере с запросом на доступ к данным аккаунта (аудио записям). После подтверждения идет ...
MobileESP: Скрипт определения мобильного устройства посетителя
Скрипт полезен, если вы хотите показывать разные версии сайта для обычных компьютеров и мобильных устройств. Большое количество методов для определения вида девайса. Доступен на разных языках программирования, включая python. Собственно порт на python был написан мной по просьбе freelance заказчика.
Так его можно использовать в django проекте:
from mobileesp import mdetect
user_agent = request.META.get("HTTP_USER_AGENT")
http_accept = request.META.get("HTTP_ACCEPT")
if user_agent and http_accept:
agent = mdetect.UAgentInfo(userAgent=user_agent, httpAccept=http_accept)
# устройство посетителя - новый ...
Отладка django проекта с помощью встроенного python отладчика pdb
Я использую sublime-text в качестве редактора python кода. В нем нет встроенного отладчика, поэтому для отладки django проектов я в основном делал так:
print var_name
и в консоле локального сервера смотрел вывод команды. Я использую этот метод и сейчас, но иногда хочется пройтись по коду по шагам, посмотреть все переменные.
Это можно сделать с помощью встроенного python отладчика pdb:
import pdb; pdb.set_trace()
Т.е. мы вставляем эту строку в то место в коде, где ...
Облачный сервис Openshift
Я знаю немного хостингов с бесплатным тарифом и с поддержкой python. Это Google App Engine и Alwaysdata. И вот недавно узнал про замечательный проект Openshift от RedHat, на котором и работает этот блог. Для начала небольшой обзор упомянутых хостингов.
Google app engine
Основной недостаток google app engine - ограниченный набор библиотек, которые можно использовать. Конечно, чисто python библиотеки можно ставить, но те, которые требуют C компиляции - нет. К примеру, не получится использовать pycurl. Так же на ...
Этот сайт
Особенности:
- работает на python+django
- дизайн twitter bootstrap
- в основе мой форк django-articles-transmeta блог-движка django-articles. В форке добавлена возможность перевода статей (джанго моделей)
- работает в облаке на openshift
- есть полнотекстовый поиск, сделан с помощью haystack + whoosh
- многоязычность (русский и английский)
- код лежит на github
Часто читая чужие блоги у меня мелькала мысль создать свой, но все не хватало времени взяться за это. Еще думал, что мне в нем писать? Наконец-то собрался, выделил время и вот ...