Архив

Публикации с меткой ‘python’

Метод как свойство объекта в Python

18 Август 2010

Всё-таки Python красивый язык. Свойство объекта может быть определено как специальный метод экземпляра объекта. Практически это позволяет обращаться к свойству как по имени, так и с помощью метода (getter или setter, или и то и другое в зависимости от операции). Кроме того, такие обращения к методу позволяют при получении и установке свойств выполнять дополнительные операции, например изменять счётчик обращений к свойству объекта.

  1. class MyClass(object):
  2.    def get_a(self):
  3.       return self._a + 1
  4.    def set_a(self, value):
  5.       self._a = value - 1
  6.    a = property(get_a, set_a, doc="Off by one a")
  7.  
  8. # Python 2.6 style
  9. class MyClass(object):
  10.    @property
  11.    def a(self):
  12.       return self._a + 1
  13.    @a.setter #makes the property writeable
  14.    def a(self, value):
  15.       self._a = value - 1

,

API к Я.ру

4 Август 2010

Сначала вКонтакте открывает XMPP, теперь вот Яндекс запустил бету API к Я.ру. Гораздо интереснее не сама новость, а рассказ Ивана Сагалаева о том, как всё это делалось и устроено внутри. API сделано в соответствии с идеологией REST. Помимо собственно API сделан также сервис OAuth-авторизации для этого и других API Яндекса. В блоге яндекса есть даже пример кода на Python, реализующий смену настроения пользователя.

Возникает такое ощущение, что рунет начинает потихонечку обрастать такими сервисами, позволяющими интегрироваться друг-в-друга с применением общедоступных API, и это есть хорошо.

, , ,

Отладка в GAE (Python)

При разработке приложения GAE (Google Application Engine) на Python часто возникает потребность в выводе отладочной информации. Вдумчивое изучение документации показало, что надо использовать стандартный модуль logging, как описано в документации GAE. Вывод отладочных сообщений осуществляется с помощью функций info(), debug() и т.д. Отладочные сообщения выводятся в консоль запущенного dev_appserver. Отладка в опубликованном приложении может быть просмотрена в консоли администрирования.

, ,

XLRD – читалка Excel для Python

21 Июнь 2010

Понадобилось по работе забивать данные из нескольких разноформатных файлов Excel в одну единообразную базу MySQL. Данных было много, вручную вбивать,- долго, да и ошибок можно наделать (ага, тот самый человеческий фактор). Естественным образом появилось желание автоматизировать этот ужос. Встроенный в MS Office VisualBasic показался некошерным по нескольким причинам: во-первых,- я его не очень хорошо знаю, а во-вторых,- не кроссплатформенно. Из других доступных языков под руками только Java и Python. Полез искать, что у нас есть в питоне для чтения Excel и нашёл чудесную совершенно библиотеку XLRD. Работает на любой платформе, где есть Python, легко читает всё что нужно. Небольшая проблема,- не читает формат xlsx (MS Office 2007), особо не вникал в чём проблема.

За запись Excel в Python отвечает парный пакет XLWT

, ,

UTF в Python

Чтобы использовать юникод в исходных кодах python, например в комментариях или значениях констант, нужно уведомить интерпретатор Python о том, что в коде присутствуют символы не из набора ASCII. Для этого нужно вставить в первой или второй строке комментарий специального вида:

# -*- coding: utf-8 -*-

Синтаксис комментария впервые введён в редакторе Emacs для установки локальных для файла переменных. Emacs поддерживает множество различных переменных, но в python поддерживается только 'coding'. Обрамляющие символы -*- показывают, что комментарий является специальной настройкой. Внутри комментария устанавливается имя переменной coding и значение, разделённое двоеточием

,

Яйца Питона

Чтобы увидеть пасхальные яйца,- стихи, зашитые в интерпретатор Питона, достаточно набрать команду

$ python -m this

Собственные библиотеки модулей в скриптах Python

Не в первый раз уже напарываюсь,- Python не находит пакет при импорте:

приложение (скрипт), использует собственные пакеты. Модули лежат в папке classes рядом со скриптом. Один из модулей называется, к примеру, examplemodul.py и содержит exampleclass.py. В скрипте:

from classes.examplemodul import *

.... и получаем ошибку при запуске
Читать далее...

, ,

Следите за границей

19 Ноябрь 2009

Несколько дней не мог найти блуждающую багу в программе на python: файл базы pdb (Pilot Database) при определённых условиях сохранялся неправильно. Везде, где только можно, вставил отладочные сообщений и assert'ы,- вроде всё правильно,- но не работает. Пришлось вооружаться HEX-редактором: в поле ID записывается номер текущей записи открытым текстом,- 1 байт на разряд. До 999 записи всё хорошо, в 1000-й записи последний ноль залезает в следующую запись и все последующие становятся нечитабельны. Естественно, в описании формата написано, что ID длиной всего 3 байта:

struct pdb_rec_header { /* 8 bytes total */
....
char uniqueID[3];
....
}
.
Так что переполнения бывают даже у питонов ;-)

В программе использовал готовую библиотеку peepdb.py, ошибка была как раз в ней. Моя исправленная версия peepdb

, , ,

PyScripter: Редактор для питоновода

26 Октябрь 2009

pyscripter Понадобился качественный редактор для питона,- с подсветкой кода, автоматическим дополнением и прочими удобствами. Вообщем, не редактор, а полноценная IDE. Причём, для изначально враждебного окружения, т.е. под винду. Гугл выдал несколько ссылок на полезные форумы, где и нашлась ссылка на PyScripter. Программа не "без чудес",- сразу натолкнулся на проблему с поиском python25.dll,- но после прописания всех необходимых путей программа запустилась (надо признать, что версия Python 2.6 пока не поддерживается). На вид,- нормальная среда разработки, с окнами Output, CallStack, Watches, Breackpoints и т.д. Подсветка кода настраивается, настройки переносятся в ini-файле вместе с программой, например, на USB-флешке. Посмотрим, каково оно будет в работе.

, , ,

Python: dict из 2 массивов

21 Август 2009

В который раз уже забываю и снова приходится искать, как в python создать словарь(dict) из двух массивов, значения из первого массива будут ключами (keys), значения второго,- значениями хеша (values):

hash = dict(zip(keys, values))

Как сделать тоже самое на многих других языках, включая Ada, Prolog,Scala и TCL, можно посмотреть на rosettacode.org

ЗЫ: ключевые слова: знерщт вшсе ;-)

,