gpt4 book ai didi

python - 在 Python 中开发分词器函数的高效且简洁的方法

转载 作者:行者123 更新时间:2023-11-30 23:49:21 24 4
gpt4 key购买 nike

我有一个库可以进行一些“翻译”,并使用很棒的 tokenize.generate_tokens() 函数来执行此操作。

而且速度非常快,而且我的工作正常。但在翻译时,我发现该函数随着我想要翻译的新标记而不断增长,并且 ifelif 条件开始出现。我还在生成器外部保留了一些变量,用于跟踪“最后看到的关键字”和类似的变量。

一个很好的例子是这里看到的实际 Python 文档(在底部):http://docs.python.org/library/tokenize.html#tokenize.untokenize

每次我添加一个新东西时,我都需要翻译这个函数,从而增加几个条件。我不认为拥有一个包含如此多条件的函数是为成长铺平道路的正确方法。

此外,我觉得分词器消耗了大量不相关的行,这些行不包含我正在翻译的任何关键字。

所以 2 个问题:

  1. 如何避免添加越来越多的条件语句,从而使此翻译功能轻松/干净地持续增长(不会影响性能)?

  2. 如何才能使其对我不感兴趣的所有不相关行有效?

最佳答案

您可以使用字典调度程序。例如,您链接到的代码可能如下所示:

def process_number(result,tokval):
if '.' in tokval:
result.extend([
(NAME, 'Decimal'),
(OP, '('),
(STRING, repr(tokval)),
(OP, ')')
])
def process_default(result,tokval):
result.append((toknum, tokval))

dispatcher={NUMBER: process_number, }
for toknum, tokval, _, _, _ in g:
dispatcher.get(toknum,process_default)(result,tokval)

您无需添加更多 if block ,而是向 dispatcher 添加键值对。

这可能比评估一长串 if-else 条件更有效,因为字典查找的时间复杂度为 O(1),但它确实需要函数调用。您必须进行基准测试,看看它与许多 if-else block 相比如何。

我认为它的主要优点是它可以将代码组织成小的(呃)、可理解的单元。

关于python - 在 Python 中开发分词器函数的高效且简洁的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7679641/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com