Найти - Пользователи
Полная версия: Работа с файлом в двоичном виде.
Начало » Python для новичков » Работа с файлом в двоичном виде.
1 2 3
Ferroman
demoriz
А теперь посмотри насколько по-другому выглядит вопрос так сформулированный. Становится понятно чего именно ты не знаешь, что хочешь узнать.

Только вот я не предлагал показывать весь там код, я предлагал показать пример куска кода где ты пытаешься открыть файл в двоичном формате и что-то с ним сделать, и не получаешь то что хочешь. Тогда становится яснее какой именно совет необходим.
pasaranax
slav0nic
как прикажите отличать 0b1111 от 1111 ?
“удобный вид” не для всех удобный, int('0b1111',2) прекрасно работает
сделай bin(1).lstrip('0b') получишь “удобный вид”
Да понятно назначение этих префиксов. Неудобство в том, что возвращается строка, лучше бы сделали специальные классы для представления чисел в популярных системах счисления.
Кстати, а что предпочтительнее bin(1).lstrip('0b') или bin(1)?
slav0nic
pasaranax
в офдоках lstrip() юзается (например тут http://docs.python.org/3.1/library/stdtypes.html#additional-methods-on-integer-types), а вообще имхо дело вкуса)
pasaranax
мерялка сказала, что работает быстрее, чем lstrip(“0b”) примерно на 20%, что не удивительно, потому что не производится сравнение
o7412369815963
pasaranax
мерялка сказала, что работает быстрее, чем lstrip(“0b”) примерно на 20%, что не удивительно, потому что не производится сравнение
ещё бы:
str.lstrip(x) равноценно if str == x: return str, или типа того
так что 20% это ещё мало
pasaranax
o7412369815963
ещё бы:
str.lstrip(x) равноценно if str == x: return str, так что 20% это ещё мало
мерялка сказала, что твой вариант еще на 80% медленнее, чем lstrip, так что 20% это еще нормально :)
o7412369815963
pasaranax
o7412369815963
ещё бы:
str.lstrip(x) равноценно if str == x: return str, так что 20% это ещё мало
мерялка сказала, что твой вариант еще на 80% медленнее, чем lstrip, так что 20% это еще нормально :)
тупо было мерять этот код, т.к. я написал ПРИНЦИП действия lstrip, и выделил жирным что в состав lstrip входит само обрезание , а сравнение должно составлять не хилую часть, в данном случае обрезается всего 2 символа, а если б 10 или 100? то процен был бы совсем другой
o7412369815963
вот, специально затестил
import timeit

print timeit.Timer(' s = "0b1010101010"[2:] ', '').timeit()
print timeit.Timer(' s = "0b1010101010".lstrip("0b") ', '').timeit()
результат:
0.0726021903934
0.232689725227
х.з. может че ни так меряю, но оказался быстрее более чем в 3 раза
pasaranax
o7412369815963
тупо было мерять этот код, т.к. я написал ПРИНЦИП действия lstrip, и выделил жирным что в состав lstrip входит само обрезание , а сравнение должно составлять не хилую часть, в данном случае обрезается всего 2 символа, а если б 10 или 100? то процен был бы совсем другой
да я понял, я на правах шутки написал ) там должен быть алгоритм более низкоуровневый и простой. да и обычные срезы можно применять только тогда, когда знаешь сколько надо отрезать, а lstrip, когда знаешь что отрезать, при возможности применения обоих, предпочтительнее срезы.

много офтопа в теме получилось, но так и не понятно, удовлетворен ли топикстартер?
pasaranax
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 много времени схавал, поэтому разница небольшая
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