Рейтинг@Mail.ru

Архив

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

Python: Маленькая хитрость. if-else vs and-or.

17 Март 2010

На этот раз будет мини-заметка, уж слишком мне понравился трюк, о котором пойдёт речь дальше :).

Наверное любому программисту приходится часто писать конструкции такого вида:

if a == b:
    c = d
else:
    c = e

Как-то разбирая исходники какого-то проекта наткнулся на весьма компактную замену. Вот для сравнения два аналогичных блока кода с использованием логических операций python’а и с использованием конструкции if-else:

# if-else:
if random.random() > 0.5:
    a = 1
else:
    a = 0

# and-or style:
a = random.random() > 0.5 and 1 or 0

На мой взгляд выглядит гораздо лучше и компактнее (да-да, if-else можно записать в 2 строчки вместо 4, но мне так не нравится ^__^) . Другое дело, что некоторым это может показаться противоречиво с некоторыми пунктами дзена python’а (import this), но это спорно :). В общем использую там, где считаю нужным.

Кстати, если кого-то интересует производительность, то она примерно одинакова, далее выложу тесты и объяснение логики для тех, кому интересно.
Читать далее…

общие вопросы, Программирование ,

Hibernate: Удаление объектов из БД.

10 Февраль 2010

По работе пришлось изучать работу Java’вского ORM’а, пока что знаком только бегло, но некоторые полезные штуки для новичка решил записать. Может кому пригодится, может нет, но хотя бы самому гуглить придётся меньше =). Кстати, примеры будут не на Java, а на Jython’е, т.к. с первым я тоже не очень знаком :).

Итак, опустим настройку и подключение Hibernate, предположим, что вы это уже сделали :). Быть может, напишу об этом позже. Требуется удалить из таблицы player (которая маппится с классом Player, естественно… или наоборот :) ) некоторые записи. Если мы знаем id игрока, тогда всё элементарно (как и в других случаях)):

player = session.load(Player, player_id)
session.delete(player)

Теперь рассмотрим случай, когда надо удалить много записей. Читать далее…

Программирование , , , ,

Python: Реализация простого web-сервера.

2 Ноябрь 2009

Не для собственных нужд, но как-то понадобилось написать простой web-сервер для обработки на нём загруженных данных. В общем-то должен был получиться простой вёб-интерфейс к программе. Он и получился, местами даже слишком простой. В общем суть такова — необходимо получить от пользователя экзешник, на сервере его обработать нужными программами и выдать результат, т.е. обработанный файл для скачивания. Можно было бы написать скрипт на php, что было бы проще, но тогда необходимо с собой таскать какой-нибудь вёб-сервер (apache, denwer и т.п.). На питоне можно его реализовать достаточно просто в самом скрипте используя стандартные заготовки и библиотеки, такие как BaseHTTPServer. Ниже следует листинг с краткими комментариями.
Читать далее…

web, Программирование , ,

Python: Проблема с подвисанием GUI на TkInter.

21 Октябрь 2009

Встала задача написания небольшой графической оболочки для программы с минимальным интерфейсом (одна кнопка и одно поле вывода). Много нам не надо, поэтому решил обойтись идущей вместе с python’ом в поставке библиотекой TkInter. И тут столкнулся с небольшой проблемой — при нажатии кнопки запускаются довольно долгие и объёмные вычисления, из-за которых виснет весь интерфейс программы.
Читать далее…

общие вопросы, прикладное, Программирование , ,

Python: генератор списка паролей для перебора (brute-force).

13 Октябрь 2009

При написании в очередной раз программы для подбора паролей к чему-либо (исключительно в образовательных целях и для учёбы ;-) ) опять возникла необходимость в итераторе по заданному алфавиту. Т.е. необходимо написать класс, который мог бы генерировать пароли для последующей передачи их в программу, которая «примеряла» их к чему-надо. К чему — дело третье и сейчас нас (вернее Вас) не волнует. В результате получился скромный класс, который приведён ниже со столь же скромными моими комментариями к нему :-).
Читать далее…

прикладное, Программирование ,

Python: файловый интерпретатор.

Очередной бестолковый велосипед от СГУ. Требуется написать «интерпретатор», который умел бы работать с файлами. Так же умел бы исполнять сторонние скрипты. Работа с файлами заключается в следующих функциях — открыть на запись, открыть на чтение, закрыть файл, читать из файла, читать n байт, записать в файл, читать в буфер, записать из буфера в файл, сместиться на определённую позицию.
Читать далее…

Программирование

Python: генерация группы ключей.

Опять делюсь универскими наработками. Задача в общем то примитивная (или по крайней мере её реализация). Надо сгенерировать N равнозначных ключей для шифрования/дешифрования сообщения. Т.е., генерируем 10 ключей, шифруем сообщение любым из этих 10, расшифровываем так же любым из этих 10. Например, зашифровали пятым ключом, расшифровали третьим, или десятым.
Читать далее…

криптография, Программирование

Python: Аналог интерактивного режима у себя в программе.

Как-то лень было писать для задачки интерфейс, а в универе требовали, и тут в мою голову пришла мысль, что не плохо было бы иметь что-то вроде аналога интерактивного режима интерпретатора python’а (лицезреть который Вы можете выполнив команду python или нажав в виндовской IDLE F5).
Читать далее…

общие вопросы, Программирование

Python: Аутентификация с помощью протокола S/KEY.

25 Февраль 2009

Смотрю тут многие интересуются безопасностью, поэтому решил выложить с описанием свою реализацию протокола S/KEY ;-). В общем то задача тривиальная, на мой взгляд, но может кому-то понадобится, если зададут в универе.

S/KEY был разработан для аутентификации на на unix-подобных ОС, в частности, на «глупых» терминалах или на публичных компьютерах с низким уровнем доверия, где использовать долгосрочные пароли нецелесообразно. Как-то так =).
Читать далее…

криптография, Программирование ,

Python: Масштабирование и наложение водяных знаков на изображение.

7 Февраль 2009

В данной статье будут рассмотрены некоторые возможности PIL (Python Imaging Library), а именно — использование библиотеки для создания превьюшек и наложения одного изображения на другое. Всё это делается достаточно тривиально, если знать как, ну а те, кто не знает, могут читать дальше ;-).
Читать далее…

прикладное, Программирование , ,

Python: Импорт структур C++ с помощью SWIG.

22 Январь 2009

Начнём с того, что такое SWIG. Итак, это мега-штука, которая предоставляет интерфейс скриптовым языкам (PHP, Python, Tcl, etc) к коду на C/C++. На официальном сайте есть несколько туториалов, которые вкратце показывают как можно применить SWIG для того или инного языка и python в их числе. Вроде при попытке повторить действия никаких ошибок не происходит, однако почему-то никак не получалось получить доступ к описанной в C++ структуре и объявленой там же переменной.

Итак, данный пост содержит немного подправленые инструкции из туториала с официального сайта SWIG для python.
Читать далее…

общие вопросы, Программирование , ,

Python: Работа с потоками. Часть 2.

21 Декабрь 2008

Мы уже недавно рассматривали примитивную работу с потоками, а именно — запуск потоков и передача им параметров, использование замков и, по большому счёту, всё. Теперь пришло время изучить другие способы взаимодействия потоков в python’е.

Для лучшего понимания советую прочитать этот пост.
Читать далее…

параллельное, Программирование , , ,