gpt4 book ai didi

php - python 异常处理是否比 PHP 和/或其他语言更有效?

转载 作者:IT老高 更新时间:2023-10-28 20:40:56 24 4
gpt4 key购买 nike

我已经深入到我的脑海中(至少在 PHP 中)使用 try...catch block 进行流控制是很糟糕的。我学到的只是用它们来处理意外错误,而不是确定程序的逻辑流程,因为catch block 很昂贵。

现在我正在学习 python,我发现到处都有很多异常,EAFP原则。这是否意味着python在处理异常方面效率更高,所以我不需要为流量控制而担心它们,还是原理仍然成立?如果不是,PHP 是规范的异常(exception)(与其他语言相比),还是 Python?

最佳答案

从历史上看,在 C++ 等语言中,与其他形式的流控制相比,异常在同一语言中的速度非常慢

在 C++ 中,有两件事在起作用:

  • 抛出异常非常复杂。堆栈需要展开,在 native 代码中这样做比在基于 VM 的高级语言中要困难得多。
  • 定期、直接的流量控制速度极快。它是 native 代码;分支是一对指令,其中回滚堆栈的异常会调用复杂的算法(在可能是压缩的大型表中查找堆栈数据等)。

这种性能差异导致了异常(exception)背后的普遍智慧:只为不寻常的事情做,所以它只用于最有益的地方,而不是会损害性能的地方。

这不适用于高级语言。这也有两个原因:

  • 回滚堆栈要简单得多。堆栈很容易检查;您不需要魔术表就可以知道回滚堆栈的距离以及在任何给定时间构造了哪些对象。
  • 常规程序流程本来就比较慢。在基于 VM 的语言中,一切都需要更多的工作才能开始。

异常仍然不是免费的,但差异不再是值得担心的事情。这意味着在 C++ 中形成的一般智慧在这里被误用了。在正常的程序流程中经常使用异常。

事实上,它们是内置在语言中的,在你一直使用的结构中。每次使用迭代器时——每个 for x in xrange(1000),都会使用 StopIteration 异常来结束循环。

在 Python 中选择异常或线性流控制更有意义。不要根据性能进行选择,除非您实际上处于性能很重要的内部循环中;在这种情况下,一如既往地分析并找出它是否真的重要。

(我不会为 PHP 说话。)

关于php - python 异常处理是否比 PHP 和/或其他语言更有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4717484/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com