我的问题相当基础但可能需要一个具有挑战性的解决方案。
基本上,我有一个任意函数,我们称之为some_function。
def some_function(n):
for i in range(n):
i+i
r = 1
r = r+1
我想计算在执行此函数的任意调用中发生的操作数(例如some_function(5)
。发生了7次操作)。
如何计算函数调用中发生的操作数?我无法修改some_function
。
答案 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;和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本身的所有指令。因此,您必须找到自己的参考资料。