【问题标题】:What's the fastest way to parse arguments in Python?在 Python 中解析参数的最快方法是什么?
【发布时间】:2021-04-12 05:58:03
【问题描述】:

传递简短命令行选项列表的最快方法是什么?

我从一个列表开始,然后考虑使用一个 numpy 数组,因为据我了解,数组中的项目都是预先输入的,并且更有效地存储在内存中。

是否值得 Cythonizing 函数?是否值得使用 numpy 数组,还是我很可能过早优化?

arg 字符串/列表如下所示:

ARG_STRING = 'cdehinu:'
ARG_LIST = ['credentials',
            'delete_user',
            'email',
            'help',
            'ip',
            'notifications',
            'user_load=']

解析函数的一个最小示例如下所示:

def arg_parse(self, opts):

    for opt, arg in np.array(opts):     # here I have added the numpy conversion
        if opt in {'-i', '--ip'}:
            do.something()
        elif opt in {-h, '--help}:
            do.something_else()
        ...

我知道,归根结底,这一切都是不必要的,而且我的感觉是,将它转换为数组所花费的时间与在这个小列表中节省的时间一样多,甚至更多,但为了最佳(和/或最快)实践,我很想听听一些更有经验的人对此事的看法,或其他如何优化此过程的想法。

提前致谢。

【问题讨论】:

  • 您是否有任何理由认为解析参数会显着延迟您的程序?
  • 您是否考虑过只使用现有的参数解析模块?它可能会使您的代码更易于管理,也更易于其他人理解。
  • 不是真的 tbh,但它发生在程序中的其他任何事情之前,所以我希望它尽可能优化。
  • @larsks 我没有,谢谢
  • @nihilok 首先发生并不一定意味着它会成为您的性能瓶颈,它可能会更有效地分析您的程序,然后根据您的发现进行优化。

标签: python python-3.x loops parsing optimization


【解决方案1】:

参数解析在典型应用程序中只发生一次。除非应用程序是微不足道的,否则参数解析不太可能对执行时间产生任何明显影响,如果它是“命令行选项的简短列表”,则更少。

在参数解析中您应该优化的是可用性。这包括遵守常用的命令行约定以及提供良好且易于访问的文档以及对参数正确性的全面验证。

已建立的参数解析库往往专注于这些目标,有时甚至会以略微增加运行时间为代价。但是每次调用所产生的几微秒将在第一次良好的使用消息节省了漫长而令人沮丧的脚本调试会话时得到充分补偿。

对于 Python 程序,最大的启动成本是初始化执行环境,尤其是搜索导入的模块。这些可能远远超过例如argparse 的执行时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 2013-09-01
    • 2013-01-25
    • 2016-12-03
    • 1970-01-01
    • 2016-10-27
    • 1970-01-01
    相关资源
    最近更新 更多