Итераторы в Python

Posted by & filed under python.

Определение итератора: class MyIter: def __init__(self, start, stop): self.value = start — 1 self.stop = stop def __iter__(self): return self def next(self): self.value += 1 if self.value > self.stop: raise StopIteration return self.value Работа с итератором: for i in MyIter (1,5): print i

auto increment в postgreSQL

Posted by & filed under PostgreSQL.

Вообще, решение проблемы я нашел здесь http://neilconway.org/docs/sequences/. На случай если ссылка будет не доступна напишу самое главное: Создание таблицы CREATE TABLE users ( id SERIAL PRIMARY KEY, name TEXT, age INT4 ); SERIAL — аналог auto_increment Создание записи: INSERT INTO users (name, age) VALUES (‘Mozart’, 20);

Объединение 2 словарей в Python

Posted by & filed under python.

Объединение 2 словарей: a.update(b); Если ключи совпадают, то будет перезаписан значением из b. Пример: >>> a={‘a’:’1′,’b’:’2′} >>> b={‘b’:’3′,’c’:’4′} >>> a.update(b) >>> a {‘a’: ‘1’, ‘c’: ‘4’, ‘b’: ‘3’}

Не используй глобальные переменные

Posted by & filed under python.

Размышления. Почему в функцию должны передаваться все параметры, а не использовать глобальные? Да потому что если захочешь эту функцию вызвать из другого класса (модуля), то её уже стоит поместить в отдельный модуль, а тут связь с глобальными переменными (переменными класса  и т.д.) рушится

Нижний регистр переменных в хранимых функциях (PostgreSQL, plpythonu)

Posted by & filed under PostgreSQL.

Пример: CREATE OR REPLACE FUNCTION myschema.find_available(num_State integer) RETURNS SETOF integer AS $BODY$ plan0= plpy.prepare(«SELECT id,start_available, stop_available FROM «Flat» WHERE state=$1″,[«integer»]) rv=plpy.execute(plan0,[num_State]) … BODY$ LANGUAGE ‘plpythonu’ VOLATILE … Выдает сообщение DETAIL: <type ‘exceptions.NameError’>: global name ‘num_State’ is not defined Приводим переменную num_State к нижнему регистру ( num_state) и ошибки уже нет.

md5 в Python

Posted by & filed under python.

Делал логирование на сайте, сначала писал код так a= md5.new(«password»).digest() В результате значение «а» принимало бинарный(? незнаю как правильно сказать) вид и нельзя было записать в БД. Решение простое — нужно делать так: a= md5.new(«password»).hexdigest() Значение «а» можно писать в БД