Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 22, 2009 13:53:05

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Работа с файлом в двоичном виде.

demoriz
А теперь посмотри насколько по-другому выглядит вопрос так сформулированный. Становится понятно чего именно ты не знаешь, что хочешь узнать.

Только вот я не предлагал показывать весь там код, я предлагал показать пример куска кода где ты пытаешься открыть файл в двоичном формате и что-то с ним сделать, и не получаешь то что хочешь. Тогда становится яснее какой именно совет необходим.

Отредактировано (Сен. 22, 2009 13:53:28)

Офлайн

#2 Сен. 22, 2009 17:16:21

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с файлом в двоичном виде.

slav0nic
как прикажите отличать 0b1111 от 1111 ?
“удобный вид” не для всех удобный, int('0b1111',2) прекрасно работает
сделай bin(1).lstrip('0b') получишь “удобный вид”
Да понятно назначение этих префиксов. Неудобство в том, что возвращается строка, лучше бы сделали специальные классы для представления чисел в популярных системах счисления.
Кстати, а что предпочтительнее bin(1).lstrip('0b') или bin(1)?



Офлайн

#3 Сен. 22, 2009 22:09:13

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

Работа с файлом в двоичном виде.

pasaranax
в офдоках lstrip() юзается (например тут http://docs.python.org/3.1/library/stdtypes.html#additional-methods-on-integer-types), а вообще имхо дело вкуса)

Офлайн

#4 Сен. 23, 2009 08:09:49

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с файлом в двоичном виде.

мерялка сказала, что работает быстрее, чем lstrip(“0b”) примерно на 20%, что не удивительно, потому что не производится сравнение



Отредактировано (Сен. 23, 2009 08:10:07)

Офлайн

#5 Сен. 23, 2009 19:11:47

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Работа с файлом в двоичном виде.

pasaranax
мерялка сказала, что работает быстрее, чем lstrip(“0b”) примерно на 20%, что не удивительно, потому что не производится сравнение
ещё бы:
str.lstrip(x) равноценно if str == x: return str, или типа того
так что 20% это ещё мало

Отредактировано (Сен. 23, 2009 19:16:24)

Офлайн

#6 Сен. 23, 2009 19:28:36

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с файлом в двоичном виде.

o7412369815963
ещё бы:
str.lstrip(x) равноценно if str == x: return str, так что 20% это ещё мало
мерялка сказала, что твой вариант еще на 80% медленнее, чем lstrip, так что 20% это еще нормально :)



Офлайн

#7 Сен. 23, 2009 20:06:12

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Работа с файлом в двоичном виде.

pasaranax
o7412369815963
ещё бы:
str.lstrip(x) равноценно if str == x: return str, так что 20% это ещё мало
мерялка сказала, что твой вариант еще на 80% медленнее, чем lstrip, так что 20% это еще нормально :)
тупо было мерять этот код, т.к. я написал ПРИНЦИП действия lstrip, и выделил жирным что в состав lstrip входит само обрезание , а сравнение должно составлять не хилую часть, в данном случае обрезается всего 2 символа, а если б 10 или 100? то процен был бы совсем другой

Офлайн

#8 Сен. 23, 2009 20:21:21

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Работа с файлом в двоичном виде.

вот, специально затестил

import timeit

print timeit.Timer(' s = "0b1010101010"[2:] ', '').timeit()
print timeit.Timer(' s = "0b1010101010".lstrip("0b") ', '').timeit()
результат:
0.0726021903934
0.232689725227
х.з. может че ни так меряю, но оказался быстрее более чем в 3 раза

Офлайн

#9 Сен. 23, 2009 20:22:32

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с файлом в двоичном виде.

o7412369815963
тупо было мерять этот код, т.к. я написал ПРИНЦИП действия lstrip, и выделил жирным что в состав lstrip входит само обрезание , а сравнение должно составлять не хилую часть, в данном случае обрезается всего 2 символа, а если б 10 или 100? то процен был бы совсем другой
да я понял, я на правах шутки написал ) там должен быть алгоритм более низкоуровневый и простой. да и обычные срезы можно применять только тогда, когда знаешь сколько надо отрезать, а lstrip, когда знаешь что отрезать, при возможности применения обоих, предпочтительнее срезы.

много офтопа в теме получилось, но так и не понятно, удовлетворен ли топикстартер?



Офлайн

#10 Сен. 23, 2009 20:24:15

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с файлом в двоичном виде.

o7412369815963
вот, специально затестил
Код:

import timeit

print timeit.Timer(' s = “0b1010101010” ‘, ’').timeit()
print timeit.Timer(' s = “0b1010101010”.lstrip(“0b”) ‘, ’').timeit()

результат:
0.0726021903934
0.232689725227
х.з. может че ни так меряю, но оказался быстрее более чем в 3 раза
я вот так тестил:
t = Timer('''
for i in range(1000):
b = bin(i)[2:]
''')
print t.timeit(1000)

t = Timer('''
for i in range(1000):
b = bin(i).lstrip("0b")
''')
print t.timeit(1000)
1.33105897903
1.72877597809

наверное, range много времени схавал, поэтому разница небольшая



Отредактировано (Сен. 23, 2009 20:25:47)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version