Python中的操作

时间:2014-07-20 04:37:11

标签: python

我的问题相当基础但可能需要一个具有挑战性的解决方案。

基本上,我有一个任意函数,我们称之为some_function。

def some_function(n):
    for i in range(n):
           i+i
    r = 1
    r = r+1

我想计算在执行此函数的任意调用中发生的操作数(例如some_function(5)。发生了7次操作)。

如何计算函数调用中发生的操作数?我无法修改some_function

2 个答案:

答案 0 :(得分:1)

使用byteplay

示例:

#!/usr/bin/env python


from byteplay import Code


def some_function(n):
    for i in range(n):
        i + i
    r = 1
    r = r + 1


def no_of_bytecode_instructions(f):
    code = Code.from_code(f.func_code)
    return len(code.code)


print(no_of_bytecode_instructions(some_function))

<强>输出:

$ python -i foo.py
28
>>> 

<强> NB:

  • 这仍然让您不知道f有多复杂。
  • &#34;指令数&#34; !=&#34;算法复杂度&#34; (不单独
  • 请参阅:Big O
  

算法复杂度衡量的是否。执行的指令   相对于输入数据集的大小。

一些简单的例子&#34;复杂性&#34;和Big O

def func1(just_a_list):
    """O(n)"""

    for i in just_a_list:
        ...

def func2(list_of_lists):
    """O(n^2)"""

    for i in list_of_lsits:
        for j in i:
            ...

def func3(a_dict, a_key):
    """O(1)"""

    return a_dict[a_key]

答案 1 :(得分:1)

我认为你真的在追随其他人已经告诉过你的东西 - 大O符号。

但是如果你真的想知道实际执行的指令数量,你可以在linux上使用它:

perf stat -e instructions:u python yourscript.py

将输出:

  

&#39; python yourscript.py&#39;的性能计数器统计信息:

    22,260,577 instructions:u           

   0.014450363 seconds time elapsed

请注意,它包含了执行python本身的所有指令。因此,您必须找到自己的参考资料。