python的函数调用会不会开辟新栈?
python函数是对象,这样的话是不是函数调用就直接pc指针跳一下就可以了?
如果python函数调用开销比c语言大,python又没有内联函数或者宏,那该如何优化函数调用的开销?
python的函数调用会不会开辟新栈?
python函数是对象,这样的话是不是函数调用就直接pc指针跳一下就可以了?
如果python函数调用开销比c语言大,python又没有内联函数或者宏,那该如何优化函数调用的开销?
4 回答4.5k 阅读✓ 已解决
1 回答3.4k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
1 回答4.5k 阅读✓ 已解决
1 回答3.9k 阅读✓ 已解决
2 回答428 阅读✓ 已解决
Python函数调用
对应的字节码是:CALL_FUNCTION
, 这个过程包括了:分析位置参数和关键参数
函数类型判断
提取函数对象的
CodeObject
根据
CodeObject
判断是执行PyEval_EvalFrameEx
还是PyEval_EvalCodeEx
但是不管最后结果怎样, 都会有个创建栈帧对象的动作:
f = PyFrame_New(tstate, co...)
所以函数调用并不像你理解的 直接pc指针跳一下就可以, 这是个繁琐的步骤!
故, 与其纠结在函数调用这块的性能损失, 倒不如利用cProfile这类的性能分析库去分析真正的瓶颈, 因为在数据结构, 算法以及网络/磁盘IO等等,可优化的空间更大!
如果真的这么纠结, 那就别用函数吧, 直接一波代码说干就干(开玩笑~)