Pull to refresh
98
0
Владислав Степанов @Utter_step

Пользователь

Send message

Улучшение производительности Python 2.7

Reading time 2 min
Views 20K

От переводчика: в двух словах, в декабре 2015 выйдет релиз Python 2.7.11, ускоряющий работу интерпретатора CPython до 20%. Ниже перевод статьи с LWN.net, рассказывающей о сути и процессе произошедших изменений в коде. Имена, в произношении которых я не уверен, даны в оригинальном написании. Об ошибках и неточностях перевода просьба, как обычно, сообщать в личные сообщения.

Несмотря на то, что разработка Python 2 (а конкретно ветки Python 2.7.x) находится сейчас в состоянии «никаких новых фич», которое в обычной ситуации заранее ставит крест на любых крупных изменениях, команда разработки приняла решение рассмотреть и принять backport-патч из Python 3, привносящий заметное улучшение производительности интерпретатора.
Читать дальше →
Total votes 47: ↑45 and ↓2 +43
Comments 5

И снова про опасность eval()

Reading time 6 min
Views 117K
Сколько было сломано копий при обсуждении вопроса «Возможно ли сделать eval безопасным?» — невозможно сосчитать. Всегда находится кто-то, кто утверждает, что нашёл способ оградиться от всех возможных последствий выполнения этой функции.
Когда мне понадобилось найти развёрнутый ответ на этот вопрос, я наткнулся на один пост. Меня приятно удивила глубина исследования, так что я решил, что это стоит перевести.

Коротко о проблеме


В Python есть встроенная функция eval(), которая выполняет строку с кодом и возвращает результат выполнения:
assert eval("2 + 3 * len('hello')") == 17

Это очень мощная, но в то же время и очень опасная инструкция, особенно если строки, которые вы передаёте в eval, получены не из доверенного источника. Что будет, если строкой, которую мы решим скормить eval'у, окажется os.system('rm -rf /')? Интерпретатор честно запустит процесс удаления всех данных с компьютера, и хорошо ещё, если он будет выполняться от имени наименее привилегированного пользователя (в последующих примерах я буду использовать clear (cls, если вы используете Windows) вместо rm -rf /, чтобы никто из читателей случайно не выстрелил себе в ногу).
Читать дальше →
Total votes 83: ↑77 and ↓6 +71
Comments 25

One Time Secret – после прочтения сжечь

Reading time 3 min
Views 13K

Если Вы когда-либо беспокоились, что данные, которые вы пересылаете по Сети (пароли, адреса, места встречи), могут быть перехвачены и сохранены злоумышленником, или просто не любите оставлять следы в Сети, то https://onetimesecret.com может вам помочь.

Данный сервис позволяет создавать одноразовые «секреты» — отправив секрет, вы получаете одноразовую ссылку на него, после перехода по которой секрет удаляется.
Некоторые подробности и бонус для хабравчан - ниже
Total votes 49: ↑41 and ↓8 +33
Comments 24

Понимаем декораторы в Python'e, шаг за шагом. Шаг 2

Reading time 12 min
Views 224K

И снова доброго времени суток всем читателям!
Спасибо, за проявленый интерес к первой части перевода, надеюсь, вторая вас так же не разочарует.


Итак, в первой части данной статьи мы совершили базовое знакомство с декораторами, принципами их работы и даже написали свой вручную.
Однако, все декораторы, которые мы до этого рассматривали не имели одного очень важного функционала — передачи аргументов декорируемой функции.
Что ж, исправим это недоразумение!
Читать дальше →
Total votes 73: ↑67 and ↓6 +61
Comments 25

Понимаем декораторы в Python'e, шаг за шагом. Шаг 1

Reading time 6 min
Views 428K

На Хабре множество раз обсуждалась тема декораторов, однако, на мой взгляд, данная статья (выросшая из одного вопроса на stackoverflow) описывает данную тему наиболее понятно и, что немаловажно, является «пошаговым руководством» по использованию декораторов, позволяющим новичку овладеть этой техникой сразу на достойном уровне.

Итак, что же такое «декоратор»?


Впереди достаточно длинная статья, так что, если кто-то спешит — вот пример того, как работают декораторы:
def makebold(fn):
    def wrapped():
        return "<b>" + fn() + "</b>"
    return wrapped
 
def makeitalic(fn):
    def wrapped():
        return "<i>" + fn() + "</i>"
    return wrapped
 
@makebold
@makeitalic
def hello():
    return "hello habr"
 
print hello() ## выведет <b><i>hello habr</i></b>

Те же из вас, кто готов потратить немного времени, приглашаются прочесть длиииинный пост
Total votes 119: ↑106 and ↓13 +93
Comments 38

Ускорение кода на Python средствами самого языка

Reading time 5 min
Views 80K
Каким бы хорошим не был Python, есть у него проблема известная все разработчикам — скорость. На эту тему было написано множество статей, в том числе и на Хабре.

Что с этим можно сделать?
Total votes 98: ↑86 and ↓12 +74
Comments 46

Стеганография на Perl

Reading time 4 min
Views 5K
Доброго времени суток, уважаемые читатели.

Я — представитель типичной (для Хабра) современной «школоты». Интересуюсь околокомпьютерной тематикой, знаю пару языков программирования, верю, что что-то в этом смыслю. Но, пост не о том.

Просматривая хабр, я нередко натыкался на посты по теме стеганографии. Как начинающего (очень начинающего, ну совсем начинающего) программиста эта тема заинтересовала меня своей, с одной стороны неочевидностью, с другой — относительной простотой реализации. К тому-же, приближалась практика по программированию…
Пораскинув мозгами, я решил построить свой лунапарк, с блэк... написать свою стеганографирующую программу. Об этой программе, трудностях при ее написании и об их преодолении и будет мой первый хабрапост.
Читать дальше →
Total votes 47: ↑44 and ↓3 +41
Comments 32

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity