python中关于if-else使用性能的一点感悟

python中关于if-else使用性能的一点感悟

今天做leetcode第7题关于数字倒序的问题,分别使用如下程序:(72ms)

class Solution:
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        #maxNum = 2**31-1
        #minNum = -1*2**31
        i = 1
        if(x<0):
            i,x = -1,abs(x)
        x_s = str(x) 
        x_s = i*int(x_s[::-1])
        if x_s >2147483647 or x_s < -2147483648:
            return 0
        return x_s

  <span>python中关于if-else使用性能的一点感悟</span>

而使用方法2:(112ms)

class Solution:
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        #maxNum = 2**31-1
        #minNum = -1*2**31
        i = 1
        if(x<0):
            i,x = -1,abs(x)
        x_s = str(x) 
        x_s = i*int(x_s[::-1])
        
        return 0 if x_s >2147483647 or x_s < -2147483648 else x_s

  <span>python中关于if-else使用性能的一点感悟</span>

在做一下改进:(76ms)

class Solution:
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        #maxNum = 2**31-1
        #minNum = -1*2**31
        i = 1
        if(x<0):
            i,x = -1,abs(x)
        x_s = str(x) 
        x_s = i*int(x_s[::-1])
        
        return x_s if x_s <= 2147483647 and x_s >= -2147483648 else 0
        #return 0 if x_s >2147483647 or x_s < -2147483648 else x_s

  <span>python中关于if-else使用性能的一点感悟</span>

 

对比三种方法,可以看到,其实简简单单的一个if else,也有需要我们仔细考虑的:

第2种方法用时大,是因为用例大多数都是else中的内容,这样的话,大部分用例都执行完if又执行的else,这样的话,有一个if 为False之后的跳转过程,导致开销变大。

对于第3种方法,比第二种方法效率高的原因是:大部分用例都只执行到if阶段

而第1种方法和第3种方法对比,在于第1种方法使用的是 or ,对于 or 判决,如果第一个为真就满足了,可以缩小一些开销吧;

而第1种方法和第2种方法比,同样也是因为第2种方法else的跳转导致的。

 

总结就是:使用if-return-return 比 if-else-return更有效率一些。

 

参考:‘

https://stackoverflow.com/questions/9191388/it-is-more-efficient-to-use-if-return-return-or-if-else-return

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119455.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 解决跨域问题 has been blocked by CORS policy: No ‘Access-Control-Allow-Origin‘ header is present[通俗易懂]

    解决跨域问题 has been blocked by CORS policy: No ‘Access-Control-Allow-Origin‘ header is present[通俗易懂]说一下做项目时需要用到html2canvas做项目截图踩到的跨域坑。项目需要拉取用户的头像,而linkedin和微信的头像存放于cdn中,这边涉及到的跨域问题。坑1:由于跨域,画布被污染,不能调用toBlob(),toDataURL()或getImageData()方法,调用它们会抛出安全错误。按网上说的做,配置useCORS:true,…

    2022年8月24日
    51
  • 文件上传-文件名长度绕过白名单限制[通俗易懂]

    文件上传-文件名长度绕过白名单限制[通俗易懂]  在实际***中,当我们发现有文件上传的地方时,我们会尽可能地尝试所有的办法进行webshell的上传,只要能上传webshell,就说明本次***至少成功了一半,后续就看获得的webshell的权限情况进行下一步的操作。对于文件上传漏洞的防护来说,主要分为以下两类:白名单限制和黑名单限制,对于黑名单的限制,我们只需要寻找一些较为偏僻的可执行后缀、大小写混写以及相关操作系统的特性(如windo…

    2022年10月19日
    2
  • vue 深入响应式原理 注意事项

    vue 深入响应式原理 注意事项对vue.js的响应式的原理的理解,有助于更加灵活的使用vue,和避开一些坑所以了解其运行原理十分重要

    2022年5月9日
    42
  • 智慧职教云Java题库_云课堂智慧职教java职业证书题库答案

    智慧职教云Java题库_云课堂智慧职教java职业证书题库答案云课堂智慧职教java职业证书题库答案更多相关问题老子说“我有一颗愚人之心”,“若婴儿未孩”。下面哪一个选项最近此义:“大多数人都认为X是真的,所以X是真的。”属于()的论证方式。“大学语文”课程的前身是“大一国文”课程。()权益法下核算的长期股权投资,会导致投资企业投资收益发生增减变动的是( )“大众创业,万众创新”号召是在哪一年提出的?“大弦嘈嘈如急雨,小弦切切如私语。嘈嘈切切错杂弹,大珠小…

    2022年6月12日
    22
  • STL库简述

    STL库简述STL简述STL库包含六个大类:容器库算法库迭代器库配置器(allocator)适配器(adaptor)仿函数(函数对象)其中后四个类主要为前两个类服务。其中使用频率最高的就是容器库,迭代器库,算法库。容器库为我们提供了存储数据的数据结构,算法库则是我们操作数据结构的算法,迭代器库作为容器库和算法库的黏合剂。容器库容器库整体分为序列型容器,关联型容器,容器适配器。1.序列型容器主要包括list,vector,deque,set。以vector作为学习实例:S

    2022年10月11日
    2
  • 分层抽样不按比例如何加权_按比例分层抽样和定额抽样的区别?

    分层抽样不按比例如何加权_按比例分层抽样和定额抽样的区别?从宏观上,两者的目的都是为了提供更好的样本代表性,并且两者的理论基础都来自于:总体的个体的同质性越高,抽样误差越小,样本的代表性越好。两者的本质区别在于是否以概率为基础,比例分层抽样是概率抽样而后者是非概率抽样。从最宏观的角度来说,比例分层抽样产生的样本是随机抽样样本,其本身可以进行抽样误差的评估和推断检验,进而把你样本的结论推广到总体。而定额抽样本身不具备这种可能。从具体操作上,两者都需要选取一…

    2022年5月14日
    69

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号