![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: нет Всего: 85 |
В связи с переходом на 3-ую версию, возник ряд идиотских непоняток.
одна из них Как в байтс прибавить байт ? т.е
Во 2-ом питоне было просто a += chr (n) здесь такое не прокатывает. Нашел конечно пару способов, но мне они не нравятся. a += bytes ([n]) не нравится тем, что обязательно нужно заключать в [], иначе фигня получится. (ладно бы ошибка возникала) a += bytes (range (n, n + 1)) Ну тоже абсолютно не нравится. a += bytes.fromhex (hex (n)[2:]) еще один идиотский способ. хотелось бы что-то такое: a += byte (n) элементарная же вещь, просто прибавить нужный байт? |
|||
|
||||
4ell |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 17.9.2011 Репутация: 1 Всего: 1 |
Из документации
bytes([source[, encoding[, errors]]]) Return a new “bytes” object, which is an immutable sequence of integers in the range 0 <= x < 256. bytes is an immutable version of bytearray – it has the same non-mutating methods and the same indexing and slicing behavior. Юзайте bytearray, какой смысл использовать неизменяемый объект?
|
|||
|
||||
volatile |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: нет Всего: 85 |
4ell, большое спасибо.
Не хотелось гонять из bytes в bytearray, на каждом шагу. В общем написал пока такую функцию:
и делаю как и хотел: Добавлено через 1 минуту и 18 секунд ps: вообще, имхо не совсем продумано разработчиками. В той же документации, говориться: там где использовались анси строки, теперь нужно использовать bytes Строки тоже были неизменяемые, но с ними такой проблемы не было. |
||||||
|
|||||||
4ell |
|
||||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 17.9.2011 Репутация: 1 Всего: 1 |
Вот что они написали про создание bytes объектов
Путаница с 3м питоном определенно есть, лично я так до сих пор 2.7 использую и доволен. Если уж красивостей хочется, почему бы не унаследоваться от bytes и не перeписать метод __add__? Например так
Это сообщение отредактировал(а) 4ell - 27.11.2012, 03:01 |
||||
|
|||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: нет Всего: 85 |
и использовать везде MyBytes, вместо bytes? Не известно как он поведет себя с другими объектами. Да и не стоит оно того. Хотелось минимальными усилиями. Вообще я думал что есть готовая функция, как chr (), у стринга. Думал просто не нашел, потому задал вопрос. |
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: нет Всего: 85 |
Я Python использую не так давно, и для небольших "скриптовых" нужд. Но постепенно накопилось уже несколько десятков программок. И подумалось, пока их не так много, может сразу перейти на 3-ий, не так много потом нужно будет переписывать. А переходить ведь, рано или поздно придется. Сейчас, в принципе все свои основные скрипты я уже переписал. Более-менее все работает нормально. И, на сегодняшний день, я доволен 3-им пайтоном. Хотя в начале перехода рвал и метал. ![]() Сейчас устаканилось. Стал даже замечать плюсы. |
|||
|
||||
4ell |
|
||||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 17.9.2011 Репутация: 1 Всего: 1 |
На счет не стоит - согласен. А поведение должно остаться таким же, только если прибавить к объекту другой типа int поведение меняется. Вообще в Python многие вещи можно сделать коротко и красиво, этим он мне и нравиться. Правда приходится расплачиваться за это производительностью... Конкретно по поводу вариантов записи
Разработчики решили для первого случая возвращать bytes заполненный n нулями, что вполне логично. Второй вариант инициализации bytes(p) где p итерируемый объект, содержащий числа, что тоже вполне логично. Я так ничего страшного не вижу в записи bytes ([n]). Наверное это вопрос вкуса ![]() |
||||
|
|||||
volatile |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: нет Всего: 85 |
Дело не во вкусе. Можно очень легко забыть про [], и интерпретатор ни словом тебе об этом не напомнит. Так как это является валидной операцией. (просто делающей совсем не то что тебе нужно)
Если учесть что bytes это неизменяемый объект, то имхо, ничего логичного здесь нет. Неизменяемая цепочка нулевых байт, не думаю что очень часто нужно такое. Впрочем, это мое имхо. |
||||
|
|||||
4ell |
|
||||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 17.9.2011 Репутация: 1 Всего: 1 |
Хм, ваша правда забыть можно, но можно и комментарием обозначить это место .
Опять же bytes это неизменяемая версия bytearray. В документации написано, что все non-mutating методы были унаследованы от bytearray, а __init__ тоже входит в их число. Это сообщение отредактировал(а) 4ell - 28.11.2012, 15:18 |
||||
|
|||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: нет Всего: 85 |
![]() 4ell, не хочу создавать отдельную тему из-за такой мелочи, но давно хотел спросить Как в RAW строке ввести последний слеш ?
|
|||
|
||||
4ell |
|
||||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 17.9.2011 Репутация: 1 Всего: 1 |
Я понял ваш намек на несовершенство питона, разве человек может создать что-то идеальное?
Но все же и эта тема освещена в документации
Можно конечно поизвращаться
Это сообщение отредактировал(а) 4ell - 29.11.2012, 01:56 |
||||
|
|||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: нет Всего: 85 |
Да, c RAW строками явно недодумали.
(могли бы хотябы в тройных кавычках позволить ) 4ell, большое спасибо. Это сообщение отредактировал(а) volatile - 29.11.2012, 10:46 |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Python: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |