Форум сайта python.su
demoriz
А теперь посмотри насколько по-другому выглядит вопрос так сформулированный. Становится понятно чего именно ты не знаешь, что хочешь узнать.
Только вот я не предлагал показывать весь там код, я предлагал показать пример куска кода где ты пытаешься открыть файл в двоичном формате и что-то с ним сделать, и не получаешь то что хочешь. Тогда становится яснее какой именно совет необходим.
Отредактировано (Сен. 22, 2009 13:53:28)
Офлайн
slav0nicДа понятно назначение этих префиксов. Неудобство в том, что возвращается строка, лучше бы сделали специальные классы для представления чисел в популярных системах счисления.
как прикажите отличать 0b1111 от 1111 ?
“удобный вид” не для всех удобный, int('0b1111',2) прекрасно работает
сделай bin(1).lstrip('0b') получишь “удобный вид”
Офлайн
pasaranax
в офдоках lstrip() юзается (например тут http://docs.python.org/3.1/library/stdtypes.html#additional-methods-on-integer-types), а вообще имхо дело вкуса)
Офлайн
мерялка сказала, что работает быстрее, чем lstrip(“0b”) примерно на 20%, что не удивительно, потому что не производится сравнение
Отредактировано (Сен. 23, 2009 08:10:07)
Офлайн
pasaranaxещё бы:
мерялка сказала, что работает быстрее, чем lstrip(“0b”) примерно на 20%, что не удивительно, потому что не производится сравнение
Отредактировано (Сен. 23, 2009 19:16:24)
Офлайн
o7412369815963мерялка сказала, что твой вариант еще на 80% медленнее, чем lstrip, так что 20% это еще нормально :)
ещё бы:
str.lstrip(x) равноценно if str == x: return str, так что 20% это ещё мало
Офлайн
pasaranaxтупо было мерять этот код, т.к. я написал ПРИНЦИП действия lstrip, и выделил жирным что в состав lstrip входит само обрезание , а сравнение должно составлять не хилую часть, в данном случае обрезается всего 2 символа, а если б 10 или 100? то процен был бы совсем другойo7412369815963мерялка сказала, что твой вариант еще на 80% медленнее, чем lstrip, так что 20% это еще нормально :)
ещё бы:
str.lstrip(x) равноценно if str == x: return str, так что 20% это ещё мало
Офлайн
вот, специально затестил
import timeit
print timeit.Timer(' s = "0b1010101010"[2:] ', '').timeit()
print timeit.Timer(' s = "0b1010101010".lstrip("0b") ', '').timeit()
Офлайн
o7412369815963да я понял, я на правах шутки написал ) там должен быть алгоритм более низкоуровневый и простой. да и обычные срезы можно применять только тогда, когда знаешь сколько надо отрезать, а lstrip, когда знаешь что отрезать, при возможности применения обоих, предпочтительнее срезы.
тупо было мерять этот код, т.к. я написал ПРИНЦИП действия lstrip, и выделил жирным что в состав lstrip входит само обрезание , а сравнение должно составлять не хилую часть, в данном случае обрезается всего 2 символа, а если б 10 или 100? то процен был бы совсем другой
Офлайн
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)
Отредактировано (Сен. 23, 2009 20:25:47)
Офлайн