На этот раз будет мини-заметка, уж слишком мне понравился трюк, о котором пойдёт речь дальше :).
Наверное любому программисту приходится часто писать конструкции такого вида:
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), но это спорно :). В общем использую там, где считаю нужным.
Кстати, если кого-то интересует производительность, то она примерно одинакова, далее выложу тесты и объяснение логики для тех, кому интересно.
Читать далее…
lizz общие вопросы, Программирование hints, Python
По работе пришлось изучать работу Java’вского ORM’а, пока что знаком только бегло, но некоторые полезные штуки для новичка решил записать. Может кому пригодится, может нет, но хотя бы самому гуглить придётся меньше =). Кстати, примеры будут не на Java, а на Jython’е, т.к. с первым я тоже не очень знаком :).
Итак, опустим настройку и подключение Hibernate, предположим, что вы это уже сделали :). Быть может, напишу об этом позже. Требуется удалить из таблицы player (которая маппится с классом Player, естественно… или наоборот :) ) некоторые записи. Если мы знаем id игрока, тогда всё элементарно (как и в других случаях)):
player = session.load(Player, player_id)
session.delete(player)
Теперь рассмотрим случай, когда надо удалить много записей. Читать далее…
lizz Программирование Hibernate, Java, Jython, ORM, Python
Не для собственных нужд, но как-то понадобилось написать простой web-сервер для обработки на нём загруженных данных. В общем-то должен был получиться простой вёб-интерфейс к программе. Он и получился, местами даже слишком простой. В общем суть такова — необходимо получить от пользователя экзешник, на сервере его обработать нужными программами и выдать результат, т.е. обработанный файл для скачивания. Можно было бы написать скрипт на php, что было бы проще, но тогда необходимо с собой таскать какой-нибудь вёб-сервер (apache, denwer и т.п.). На питоне можно его реализовать достаточно просто в самом скрипте используя стандартные заготовки и библиотеки, такие как BaseHTTPServer. Ниже следует листинг с краткими комментариями.
Читать далее…
lizz web, Программирование BaseHTTPServer, HTTP, Python
Встала задача написания небольшой графической оболочки для программы с минимальным интерфейсом (одна кнопка и одно поле вывода). Много нам не надо, поэтому решил обойтись идущей вместе с python’ом в поставке библиотекой TkInter. И тут столкнулся с небольшой проблемой — при нажатии кнопки запускаются довольно долгие и объёмные вычисления, из-за которых виснет весь интерфейс программы.
Читать далее…
lizz общие вопросы, прикладное, Программирование GUI, Python, TkInter
При написании в очередной раз программы для подбора паролей к чему-либо (исключительно в образовательных целях и для учёбы ;-) ) опять возникла необходимость в итераторе по заданному алфавиту. Т.е. необходимо написать класс, который мог бы генерировать пароли для последующей передачи их в программу, которая «примеряла» их к чему-надо. К чему — дело третье и сейчас нас (вернее Вас) не волнует. В результате получился скромный класс, который приведён ниже со столь же скромными моими комментариями к нему :-).
Читать далее…
lizz прикладное, Программирование Brute Force, Python
Очередной бестолковый велосипед от СГУ. Требуется написать «интерпретатор», который умел бы работать с файлами. Так же умел бы исполнять сторонние скрипты. Работа с файлами заключается в следующих функциях — открыть на запись, открыть на чтение, закрыть файл, читать из файла, читать n байт, записать в файл, читать в буфер, записать из буфера в файл, сместиться на определённую позицию.
Читать далее…
lizz Программирование Python
Опять делюсь универскими наработками. Задача в общем то примитивная (или по крайней мере её реализация). Надо сгенерировать N равнозначных ключей для шифрования/дешифрования сообщения. Т.е., генерируем 10 ключей, шифруем сообщение любым из этих 10, расшифровываем так же любым из этих 10. Например, зашифровали пятым ключом, расшифровали третьим, или десятым.
Читать далее…
lizz криптография, Программирование Python
Как-то лень было писать для задачки интерфейс, а в универе требовали, и тут в мою голову пришла мысль, что не плохо было бы иметь что-то вроде аналога интерактивного режима интерпретатора python’а (лицезреть который Вы можете выполнив команду python или нажав в виндовской IDLE F5).
Читать далее…
lizz общие вопросы, Программирование Python
Смотрю тут многие интересуются безопасностью, поэтому решил выложить с описанием свою реализацию протокола S/KEY ;-). В общем то задача тривиальная, на мой взгляд, но может кому-то понадобится, если зададут в универе.
S/KEY был разработан для аутентификации на на unix-подобных ОС, в частности, на «глупых» терминалах или на публичных компьютерах с низким уровнем доверия, где использовать долгосрочные пароли нецелесообразно. Как-то так =).
Читать далее…
lizz криптография, Программирование Python, аутентификация
В данной статье будут рассмотрены некоторые возможности PIL (Python Imaging Library), а именно — использование библиотеки для создания превьюшек и наложения одного изображения на другое. Всё это делается достаточно тривиально, если знать как, ну а те, кто не знает, могут читать дальше ;-).
Читать далее…
lizz прикладное, Программирование PIL, Python, графика
Начнём с того, что такое SWIG. Итак, это мега-штука, которая предоставляет интерфейс скриптовым языкам (PHP, Python, Tcl, etc) к коду на C/C++. На официальном сайте есть несколько туториалов, которые вкратце показывают как можно применить SWIG для того или инного языка и python в их числе. Вроде при попытке повторить действия никаких ошибок не происходит, однако почему-то никак не получалось получить доступ к описанной в C++ структуре и объявленой там же переменной.
Итак, данный пост содержит немного подправленые инструкции из туториала с официального сайта SWIG для python.
Читать далее…
lizz общие вопросы, Программирование C/C++, Python, SWIG
Мы уже недавно рассматривали примитивную работу с потоками, а именно — запуск потоков и передача им параметров, использование замков и, по большому счёту, всё. Теперь пришло время изучить другие способы взаимодействия потоков в python’е.
Для лучшего понимания советую прочитать этот пост.
Читать далее…
lizz параллельное, Программирование ORM, Python, SQLAlchemy, threading
Последние комментарии