kstep 21.10.2009 00:58
Python — Пузомерка для welinuxоида
Если вдруг кому интересно следить за своей (или чужой) кармой на WeLinux, набросал простой скрипт.Заодно он может служить примером простого HTML-парсера и использования декораторов/свойств в Питоне
для начинающих.
Username 21.10.2009 01:06 #
+ -1 -
почему там так много моего ника?
def __init__(self, username):
self.username = username
self.username = username
омг, я - звезда!
Только начал изучать питон, и, увидев функцию cached(func) из вышеприведённого листинга, понял, что мне ещё как до луны пешком :(
Это декоратор.
Строго говоря, строчки
означают реально:
То есть декоратор — это функция, позволяющая «на лету» модифицировать
другую функцию (или метод), чаще всего «обернуть» ещё в некую обёртку.
Функция декоратор должна принимать на вход функцию как единственный
параметр и возвращать другую функцию (или ту же самую, главное — фукнцию).
Здесь, например, метод karma() оборачивается в проверку на нахождение
результатов его работы в кеше, и если она уже была вызвана (и данные
закешированы), то второй раз она не вызовется.
Советую попробовать написать пару своих декораторов. Там всё реально просто =)
Строго говоря, строчки
@cached
def karma(self):
означают реально:
def karma(self):
...
karma = cached(karma)
То есть декоратор — это функция, позволяющая «на лету» модифицировать
другую функцию (или метод), чаще всего «обернуть» ещё в некую обёртку.
Функция декоратор должна принимать на вход функцию как единственный
параметр и возвращать другую функцию (или ту же самую, главное — фукнцию).
Здесь, например, метод karma() оборачивается в проверку на нахождение
результатов его работы в кеше, и если она уже была вызвана (и данные
закешированы), то второй раз она не вызовется.
Советую попробовать написать пару своих декораторов. Там всё реально просто =)
а можно для ленивых написать краткое введение в питон и порекомендовать книжечки?
Пожалуйста, после этой книги обычно хватает стандартной докумантации с оффсайта
хорошая, но не совсем полная, думаю лучше "Программирования на Python" Лутца, для начала нет
А чем стандартный urllib2 не угодил ?
имхо так проще и не нужно ставить лишнюю библиотеку
имхо так проще и не нужно ставить лишнюю библиотеку
from urllib2 import urlopen
html=urlopen(URL).read()
Чем? Курл даёт очень большой задел на будущее. То же управление куками в случае если я захочу прикрутить здесь логин и доставать данные, видимые только данному юзеру (типа новый ЛС).
Кроме того курл универсален и везде работает одинаково. Зачем что-то выдумывать?
а вы почитайте: http://docs.python.org/library/urllib2.html
все вышесказанное справедливо
все вышесказанное справедливо
Замечены баги:
1) в коде программы добавлены лишние двойные кавычки в регексп, из-за чего при прямом копипасте из поста код не работает. Это не есть хорошо.
2) нумерация строк «плывёт» в ff3.5, т.е. номера строк не соответствуют реальным.
Вот тут: http://p-nut.info/blog/karring_v_pitone.html пример реализации отлаженной нумерации строк (очень долго подгонял под разные браузеры).
1) в коде программы добавлены лишние двойные кавычки в регексп, из-за чего при прямом копипасте из поста код не работает. Это не есть хорошо.
2) нумерация строк «плывёт» в ff3.5, т.е. номера строк не соответствуют реальным.
Вот тут: http://p-nut.info/blog/karring_v_pitone.html пример реализации отлаженной нумерации строк (очень долго подгонял под разные браузеры).
честно говоря не совсем понял зачем вам потребовался StringIO, для хранения результатов от curl хватило бы и обычной строки, разве нет?
а насчет кеширования - мне кажтся лучше илюстрирует идею какой нибудь факториал, или любая другая затратная, рекурсивная функция.
а насчет кеширования - мне кажтся лучше илюстрирует идею какой нибудь факториал, или любая другая затратная, рекурсивная функция.