Я использую старую версию python на встроенной платформе ( Python 1.5.2+ на платформе Telit ). Проблема в том, что у меня есть функция преобразования строки в шестнадцатеричное. Это очень медленно. Вот функция:
def StringToHexString(s):
strHex=''
for c in s:
strHex = strHex + hexLoookup[ord(c)]
return strHex
hexLookup - это справочная таблица (список python), содержащая все шестнадцатеричные представления каждого символа.
Я готов попробовать все (более компактная функция, некоторые языковые трюки, о которых я не знаю). Чтобы быть более понятным, вот тесты (разрешение на этой платформе составляет 1 секунду):
N - количество вводимых символов, которые необходимо преобразовать в шестнадцатеричное, а время указывается в секундах.
- N | Время (секунды)
- 50 | 1
- 150 | 3
- 300 | 4 * * тысяча двадцать-один
- 500 | 8
- 1000 | 15
- 1500 | 23
- 2000 | 31
Да, я знаю, это очень медленно ... но если бы я мог получить что-то вроде 1 или 2 секунд, это был бы прогресс.
Так что любое решение приветствуется, особенно от людей, которые знают о производительности Python.
Спасибо
Юлиан
PS1: (после тестирования предложенных предложений - сохранение вызова ord):
def StringToHexString(s):
hexList=[]
hexListAppend=hexList.append
for c in s:
hexListAppend(hexLoookup[ord(c)])
return ''.join(hexList)
С помощью этой функции я получил следующие значения: 1/2/3/5/12/19/27 (что явно лучше)
PS2 (не могу объяснить, но это невероятно быстро) БОЛЬШОЕ спасибо Свену Марнаху за идею !!!:
def StringToHexString(s):
return ''.join( map(lambda param:hexLoookup[param], map(ord,s) ) )
* * Времена одна тысячи сорок-девять: 1/1/2/3/6/10/12
Любые другие идеи / объяснения приветствуются!