Форум сайта python.su
BudulianinТебе нужно понять, что такое юникод.
Теже самые символы в той же самой последовательности?
BudulianinНе, юникод - это набор чисел, часть из которых отображается на символы, часть отображается на кусочки символов, а часть вообще отображается на пустоту.
Unicode это стандарт, в соответствии с которым, каждому символу определён код типа \u0444.
>>> 65536 * 17 1114112 >>>
Budulianinlatin1 была до юникода, ascii была до latin1. Поэтому ascii входит в latin1, а latin1 входит в юникод.
Теже самые символы в той же самой последовательности?
Budulianin
Дак если latin1 перевели в Unicode, он должен быть записан символами Unicode
>>> u'\xd1' is u'\u00d1' True >>>
Отредактировано py.user.next (Сен. 11, 2014 22:21:57)
Офлайн
py.user.next
В чём прикол?
>>> 'ф'.decode('latin1') is 'ф'.decode('latin1') False
>>> id('ф'.decode('latin1')) == id('ф'.decode('latin1')) True
Офлайн
Это глюки питона.
>>> a = 'ф'.decode('latin1') >>> b = 'ф'.decode('latin1') >>> a is b False >>> a, b (u'\xd1\x84', u'\xd1\x84') >>> u'\xd1\x84' is u'\xd1\x84' True >>>
>>> a = b'\xd1\x84'.decode('latin1') >>> b = b'\xd1\x84'.decode('latin1') >>> a is b False >>> a, b ('Ñ\x84', 'Ñ\x84') >>> >>> b'\xd1\x84' is b'\xd1\x84' True >>>
Офлайн
py.user.nextХе-хе, баг наковырял.
Это глюки питона.
py.user.nextЧто значит не запрещённые? Это баг, надо править.
Глюки не запрещённые.
Офлайн
BudulianinНигде не сказано, что одинаковые константы должны указывать на один объект. Если C рассматривать, там то же самое по поводу строковых литералов.
Что значит не запрещённые?
BudulianinВ питоне подобных несостыковок - вагон и маленькая тележка.
Это баг, надо править.
>>> 'abc'.endswith(('a', 'b', 'c')) True >>> 'abc'.endswith(['a', 'b', 'c']) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: endswith first arg must be str or a tuple of str, not list >>>
Отредактировано py.user.next (Сен. 14, 2014 02:08:55)
Офлайн
py.user.nextВообще-то сказано. Про числа например от -4 до 255, хе хе. И про короткие строки.
Нигде не сказано, что одинаковые константы должны указывать на один объект.
>>> a = 'ф'.decode('latin1') >>> b = 'ф'.decode('latin1') >>> id(a) 3065670568L >>> id(b) 3065669464L
>>> 'ф'.decode('latin1') is 'ф'.decode('latin1') False
>>> id('ф'.decode('latin1')) == id('ф'.decode('latin1')) True
Отредактировано Budulianin (Сен. 14, 2014 02:55:20)
Офлайн
py.user.next
Но они говорят, что там вообще должно быть только множество.
py.user.next
must be str or a tuple of str
Офлайн
Не, в смысле я у них спрашивал, почему такая несостыковка.
Budulianin
Конкретно в таком случае нечестно.
BudulianinТак это разные случаи просто. Там, где id один, они и по is совпадают. А там, где по is не совпадают, там и id разные.
Потому что id один
BudulianinДа, типа может быть, а может не быть. Где-то что-то.
Вообще-то сказано. Про числа например от -4 до 255, хе хе. И про короткие строки.
Отредактировано py.user.next (Сен. 14, 2014 03:34:37)
Офлайн
py.user.nextПочему разные-то ?
Там, где id один, они и по is совпадают.
>>> id('ф'.decode('latin1')) == id('ф'.decode('latin1')) True
>>> 'ф'.decode('latin1') is 'ф'.decode('latin1') False
Офлайн
Ну, очевидно же, что питон по-разному обрабатывает эти строки. В первом случае он создаёт один объект, а во втором - два.
То, что они одинаково обрабатываются, - это твоё предположение.
Офлайн