Найти - Пользователи
Полная версия: Питонобатхерт
Начало » Флейм » Питонобатхерт
1 2
odnochlen
http://habrahabr.ru/post/147281/

Обсуждаем.

Как по мне - автор не имеет ни малейшего представления, к какому гимору может привести юникод в 2.х. Хотя в чем-то он прав - изменения ради изменений в промышленной разработке не рулит.
odnochlen
Чего так тихо-то?
slav0nic
Автор имеет представление поболе большинства форумчан и уважаем в сообществе, если что.
Ну и статью в 2011 все прочли в оригинале, кто хотел)
odnochlen
Он может и уважаем, но с проблемами с юникодом имел дело скорее всего даже меньше меня. Или у него просто другие приоритеты.

Одно то, что sys.argv в двойке байтовый и лечится это только осезависимыми хаками.

Хотя с фреймверками на тройке, видимо, бида, даже pycurl на нем нет
slav0nic
odnochlen
про argv - arg.decode(sys.getfilesystemencoding()). не даёт в винде ожидаемого результата ?
ну и юзать юникодные параметры - моветон, разве что для поиска, не более
odnochlen
Про sys.argv(0) и юникодные пути с символами, которых нет в текущей кодовой таблице не забываем.
Люди любят не ставить u перед строками.
Неявные преобразования юникода реально могут свести с ума.

И это только одни из примеров, на которые я лично наткнулся.
odnochlen
>>> '1' == '1'[0]
True
>>> b'1' == b'1'[0]
False
Как оригинально. А зачем так сделали? Причем
>>> b'1'==b'1'[:]
True
py.user.next
>>> type(b'1')
<class 'bytes'>
>>> type(b'1'[0])
<class 'int'>
>>>
EBFE
А зачем так сделали?
Просто в двойке префикс b' игнорируется - т.е b'l' это str.
http://docs.python.org/reference/lexical_analysis.html
prefix of ‘b’ or ‘B’ is ignored in Python 2; it indicates that the literal should become a bytes literal in Python 3
2.7
>>> l = bytearray('l')
>>> l[0] == l
False
>>> l[:] == l
True
>>> type(l)
<type 'bytearray'>
>>> type(l[0])
<type 'int'>
>>> type(l[:])
<type 'bytearray'>
>>> type(b'l')
<type 'str'>
>>> type(b'l'[0])
<type 'str'>
>>> type(b'l'[:])
<type 'str'>
>>> b'l' == b'l'[0]
True
>>> b'l' == b'l'[:]
True
str == str, bytearray == bytearray - как и ожидалось.
А bytearray/byte == str пускай VBшнини сравнивают
http://docs.python.org/library/stdtypes.html
Objects of different types, except different numeric types and different string types, never compare equal



odnochlen
EBFE
Просто в двойке префикс b' игнорируется
В моем примере речь шла о тройке. Наверно, надо было это написать, хотя тройка тут считается практически дефолт питоном.

В общем, слайс всегда bytes, даже если он из одного элемента, а элемент - int. Такой вот привет из явы с byte и byte{}. Но зачем?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB