【问题标题】:efficient way to pass a sub list to a function将子列表传递给函数的有效方法
【发布时间】:2012-11-30 16:26:56
【问题描述】:

我正在尝试解析包含一系列序列化结构序列的一长串二进制数据。我能够将内存中的数据作为整数列表获取(我们称之为主列表)。

为了解析主列表中包含的不同字段,我创建了一些函数和类。我的问题是将主列表的子范围传递给这些函数和类的最有效方法是什么。

我是 Python 新手,如果我说错了什么,请原谅我。

  • 如果我这样做:parse_foo(main_list[n:N]) 我想会创建一个新列表。如果我没记错的话,这种方法效率很低。顺便说一句,我不会随时修改主列表。
  • 我想我可以使用迭代器 (iterator.next())。但问题是我无法随机访问元素。

评论和建议总是非常受欢迎。

【问题讨论】:

    标签: python performance list


    【解决方案1】:

    您可以设置函数,以便它们获取主列表、开始和结束索引。

    【讨论】:

    • 是的,但我不知道要查看整个主列表的函数和类。他们应该只看到他们正在解析的流。这也意味着额外的工作:计算主列表中所有内容的绝对位置,这很容易出错。
    【解决方案2】:

    为了评估效率,您应该利用discProfile 模块。

    来自cProfile docs

    python -m cProfile myscript.py
    

    来自dis docs

    >>> dis.dis(myfunc)
      2           0 LOAD_GLOBAL              0 (len)
                  3 LOAD_FAST                0 (alist)
                  6 CALL_FUNCTION            1
                  9 RETURN_VALUE
    

    【讨论】:

    • 感谢您的信息,现在我需要一种正确的方法将信息传递给解析不同字段的函数:)
    • 如果如您的问题所建议的那样在“效率”上评估“适当”,请同时实施并注意对字节码的影响以及分析器中热点的位置。
    猜你喜欢
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    相关资源
    最近更新 更多