Есть идеи по оптимизации этого скрипта? (Python) - PullRequest
2 голосов
/ 05 января 2010

Я работаю над небольшим сценарием, чтобы помочь мне выучить японский кана (хирагана / катакана). Всего их, вероятно, 100+ (+ || -).

По сути, все, что нужно сделать, это взять английскую версию и преобразовать ее в персонажа.

есть. a = 'あ', что составляет 12354 в десятичном виде

То, что я имею до сих пор, это:

hiraDict = { "a" : 12354, "i" : 12356 ...}

if __name__ == "__main__":
    if hiraDict.has_key(sys.argv[1]):
      print(unichr(hiraDict[sys.argv[1]]))

Со 100+ символами, это будет работать нормально или есть лучший способ приблизиться к этому?

Ответы [ 4 ]

5 голосов
/ 05 января 2010

Нет необходимости проверять наличие, просто получите его и предоставьте аргумент по умолчанию, если вы не хотите исключения:

# -*- coding: utf-8 -*-
import sys
hiraDict = {'a': 'あ', 'i': 'い', }
print(hiraDict.get(sys.argv[1], None))

... и для python 2.x:

# -*- coding: utf-8 -*-
import sys
hiraDict = {'a': u'あ', 'i': u'い', }
print hiraDict.get(sys.argv[1], None)

[править] Я только что заметил, что вы хотите сделать это для нескольких символов. Следующее позволит вам распечатать серию символов, заданных в качестве аргументов (python 3+):

# -*- coding: utf-8 -*-
import sys
hiraDict = {ord('a'): 'あ', ord('i'): 'い' }
text = " ".join(sys.argv[1:])
print(text.translate(hiraDict))
3 голосов
/ 05 января 2010

Поместите заголовок кодирования в соответствии с PEP 263 , затем непосредственно используйте символы:

# -*- coding: utf-8 -*-
hiraDict = {'a': u'あ', 'i': u'い', ...}
1 голос
/ 06 января 2010

Не только 100, это будет нормально работать и с символами 100k.

Так что не стоит беспокоиться об оптимизации производительности, если только вы не будете использовать эту процедуру тысячи раз в секунду, чего, вероятно, не будет.

1 голос
/ 05 января 2010

Из документов:

has_key (ключ)

Проверка на наличие ключа в словаре. has_key () устарел в пользу ключа в д.

Так что переписать на

if sys.argv[1] in hiraDict:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...