Порядок элементов set-ов в Python

Проверьте себя, предположите, что выведет print?

list_1 = list(set([u'external_new', u'external', u'app_store']))
list_2 = list(set([u'app_store', u'external', u'external_new']))
print list_1 == list_2

А теперь проверьте себя еще раз

list_1 = list(set([u'external_new', u'external', u'app_store'] + range(100)))
list_2 = list(set([u'app_store', u'external', u'external_new'] + range(100)))
print list_1 == list_2

На самом деле, такое поведение очевидно, достаточно вспомнить, что внутри cPython set — хеш-таблица с открытой адресацией. Если количество элементов set-а приближается к количеству элементов внутреннего массива хеш-таблицы, вероятность коллизий повышается. В случае появления коллизий, преобразование set-а в список будет выдавать элементы коллизий в той последовательности, в которой эти элементы были добавлены в set.

Отладка на Python: способы и фишки

Отладка — один из важных этапов разработки ПО. Есть много определений этого термина: начиная от «процесса нахождения ошибок на этапе разработки и их устранения», до «убеждения, что алгоритм исполнения программы соответствует ожиданиям».

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

def my_function():
    pass

то пройти по нему отладчиком даже необходимо и жизненно важно.

Читать далее

Trinder — Chrome клиент для Tinder

Наверное, многие видели приложение Tinder. Не секрет, что с ПК им пользоваться нельзя, а есть только мобильная версия.

В развлекательных целях сделал Chrome-extension Trinder для этих целей: Chrome Webstore и GitHub.

В процессе научился перехватывать SSL-трафик с Android-устройства чтобы выяснить интерфейс REST-api у Tinder. Знаю, что есть отладочные прокси, например Fiddler, но это мне показалось слишком частным случаем и хотелось уметь перехватывать именно SSL-траффик (в том числе и HTTPS).

Читать далее

Python + saml

Если Вы используйте в своём проекте библиотеку python-saml и недоумеваете, почему во время отладки приложение умирает с segmentation fault — обновите lxml. В моём случае помогло обновление до версии 3.4.2.