栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python函数调用是很慢

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python函数调用是很慢

您在这里比较苹果和梨。一种方法进行简单分配,另一种方法调用函数。是的,函数调用 增加开销。

你应该剥离下来到最低限度,为

timeit

>>> import timeit>>> timeit.timeit('a = 5')0.03456282615661621>>> timeit.timeit('foo()', 'def foo(): a = 5')0.14389896392822266

现在我们所做的就是 添加 一个函数调用(

foo
做同样的事情),所以你可以测量额外时间的函数调用需要。你不能说这是慢了近4倍,没有,函数调用
增加了 0.11的第二顶部为 1.000.000 迭代。

如果不是

a = 5
我们做一些事情,需要0.5秒,执行一个百万次迭代,将它们转移到一个功能不会让事情需要2秒。现在将花费0.61秒,因为函数开销不会增加。

函数调用需要操纵堆栈,将本地框架推入堆栈,创建新框架,然后在函数返回时再次将其清除。

换句话说,移动报表的功能增加了一个小的开销,而你移动到功能的语句越多,小的开销变得所做的总功的百分比。函数 从来没有 让这些语句本身慢。

Python函数只是存储在变量中的对象。您可以将函数分配给其他变量,用完全不同的变量替换它们,或随时删除它们。调用函数时,首先引用存储它们的名称(

foo
),然后调用函数对象(
(arguments)
)。查找必须每次都使用动态语言进行。

您可以在为函数生成的字节码中看到以下内容:

>>> def foo():...     pass... >>> def bar():...     return foo()... >>> import dis>>> dis.dis(bar)  20 LOAD_GLOBAL   0 (foo)   3 CALL_FUNCTION 0   6 RETURN_VALUE

LOAD_GLOBAL
操作码查找名称(
foo
)在全局命名空间(基本上是一个哈希表查找),结果压栈。
CALL_FUNCTION
然后调用堆栈上的所有内容,将其替换为返回值。
RETURN_VALUE
从函数调用返回,再次以栈顶的任何内容作为返回值。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/662578.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号