我有一个用于社交网络的小型机器人,它接受消息"unicode XXXX XXXX XXXX ...",其中XXXX - HEX值应该转换为Unicode字符。最初,命令只接受一个HEX值,并且运行得很好,而且速度很快。在我修改代码以接受多个值后,进程速度减慢(响应1-2秒,响应4-5秒)。
这是我的代码:
def unic(msg):
if type(msg) == list:
msg.pop(0) # removing "unicode" word
try:
sym = '' # final result
correct = [] # correct HEX values to be converted
for code in msg:
try:
chr(int(code, 16))
correct.append(code)
except:
pass
if correct != []:
for code in correct:
sym = sym + chr(int(code, 16))
elif correct == []:
return c_s.get('incorrect') # returning error message from common strings list
if sym != '':
return sym
except:
return c_s.get('incorrect')我应该在这里改变什么来加速进程?欢迎任何建议。
发布于 2016-11-18 15:47:57
只有在需要时才使用try-except。你的外力应该是徒劳的。您还应该执行一次chr(int(code, 16)),因为两次运行它没有好处,它只需要花费周期。
您的输出是可怕的,如果没有有效的输入,您将从显式地沉默它到返回一个错误。如果您有一组项,但它们没有添加到sym中,则返回None。您需要选择您的函数是如何工作的。要么删除无效字符,要么引发错误。
执行上述操作将删除一半的代码。我还会更改except以捕获某些错误,例如ValueError,否则您的程序很容易掩盖错误。
字符串是不可变的,因此sym = sym + chr(int(code, 16))需要很长的时间。相反,构建一个列表并对其进行''.join。
最后,return c_s.get('incorrect')是一个巨大的危险标志,移除这些和raise异常。
这能让你:
def unicode_(msg):
new_msg = []
for char in msg:
try:
char = chr(int(char, 16))
except ValueError:
char = '?'
new_msg.append(char)
return ''.join(new_msg)https://codereview.stackexchange.com/questions/147433
复制相似问题