← All posts tagged pypy

kb
nopython pypy иногда python очень плох. вот нашел я багу в pypy, когда у объекта делается __repr__ и тот возвращает u'%s' % u'йцукен' — происходит unicode decode error. пошел создал багу у pypy в трекере, всё должно было быть хорошо. и тут оказывается (кроме того, что уведомления до меня не доходили из-за яндекс.почты), что бага эта есть в CPython, и более того, если __repr__ возвращает юникод — вы не можете ничего делать кроме одного грязного хака внутри CPython, который позволяет вам сделать '%s' % O(), чтоб получить юникод-строку, возвращаемую repr(O()). короче, отстой.

With a __repr__ that returns an unencodable unicode string, you will get an
encoding error on CPython if you try to do anything at all, like str(O()) or
repr(O()) or print O() or `O()`. Even doing '%r' % O(). It seems that '%s' %
O() is the only thing that you can do.

Indeed, I can't believe it, but looking at the source code of CPython, there is
a special function _PyObject_Str() that is called only from '%s' formatting.
All other places call PyObject_Str() or PyObject_Repr(), which will encode the
unicode string. It makes no sense to me... What should we do? Copy this
horribly strange special case???

bugs.pypy.org
kb
Python pypy Новости с фронта "asd" += "dsa". Как известно, в CPython += быстрый, а в PyPy — медленный. Объясняется это тем, что в CPython сделан некоторый хак для ускорения (в будущем, возможно, что-то появится и в PyPy). Но суть в том, что "собирать" строку через += в питоне в принципе неправильно, потому что каждый += создает новую строку. (по иронии, хак в CPython запилил один из разработчиков PyPy).

Таким образом, собирайте вашу строку при помощи u"".join([список_строк]) и не выпендривайтесь. Ну я лично еще сделал некоторый класс UnicodeBucket, но наверное проще не выпендриваться и таки u"".join() использывать dl.dropbox.com
kb
pypy PyPy — прекрасная вещь, но явно не хватает размера сообщества. Чувствую огромную пользу только от того, что сижу у них в IRC, задаю тупые вопросы и чувствую себя подопытным программистом) Зато вопросы типа "как сделать virtualenv или pip install?" и "почему модуль такой-то не установился" приводят к улучшению документации (причем моментальному) и так далее. Надо будет сделать "неделю PyPy", или 100 paper cuts для PyPy.