Уведомления

Группа в Telegram: @pythonsu

#1 Июль 11, 2012 16:33:07

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Питонобатхерт

http://habrahabr.ru/post/147281/

Обсуждаем.

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

Отредактировано odnochlen (Июль 12, 2012 09:22:19)

Офлайн

#2 Июль 12, 2012 14:22:31

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Питонобатхерт

Чего так тихо-то?

Офлайн

#3 Июль 13, 2012 16:17:23

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

Питонобатхерт

Автор имеет представление поболе большинства форумчан и уважаем в сообществе, если что.
Ну и статью в 2011 все прочли в оригинале, кто хотел)

Офлайн

#4 Июль 13, 2012 17:00:56

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Питонобатхерт

Он может и уважаем, но с проблемами с юникодом имел дело скорее всего даже меньше меня. Или у него просто другие приоритеты.

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

Хотя с фреймверками на тройке, видимо, бида, даже pycurl на нем нет

Офлайн

#5 Июль 15, 2012 00:24:55

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

Питонобатхерт

odnochlen
про argv - arg.decode(sys.getfilesystemencoding()). не даёт в винде ожидаемого результата ?
ну и юзать юникодные параметры - моветон, разве что для поиска, не более

Офлайн

#6 Июль 15, 2012 02:25:56

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Питонобатхерт

Про sys.argv(0) и юникодные пути с символами, которых нет в текущей кодовой таблице не забываем.
Люди любят не ставить u перед строками.
Неявные преобразования юникода реально могут свести с ума.

И это только одни из примеров, на которые я лично наткнулся.

Отредактировано odnochlen (Июль 15, 2012 02:38:52)

Офлайн

#7 Июль 24, 2012 00:44:07

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Питонобатхерт

>>> '1' == '1'[0]
True
>>> b'1' == b'1'[0]
False
Как оригинально. А зачем так сделали? Причем
>>> b'1'==b'1'[:]
True

Офлайн

#8 Июль 24, 2012 01:28:12

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9873
Репутация: +  853  -
Профиль   Отправить e-mail  

Питонобатхерт

>>> type(b'1')
<class 'bytes'>
>>> type(b'1'[0])
<class 'int'>
>>>



Офлайн

#9 Июль 24, 2012 01:50:43

EBFE
Зарегистрирован: 2012-07-03
Сообщения: 99
Репутация: +  20  -
Профиль   Отправить e-mail  

Питонобатхерт

А зачем так сделали?
Просто в двойке префикс 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



Отредактировано EBFE (Июль 24, 2012 02:00:09)

Офлайн

#10 Июль 24, 2012 06:32:08

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Питонобатхерт

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

В общем, слайс всегда bytes, даже если он из одного элемента, а элемент - int. Такой вот привет из явы с byte и byte{}. Но зачем?

Отредактировано odnochlen (Июль 24, 2012 06:35:36)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version