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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 2018美赛 A 题

    2018美赛 A 题2018年MCM问题A:多跳HF无线电传播背景:在高频(HF,定义为3-30mHz),无线电波可以通过离开电离层和离开地球的多次反射而行进很长距离(从地球表面上的一个点到地球表面上的另一个远点)。对于低于最大可用频率(MUF)的频率,来自地面源的HF无线电波将电离层反射回地球,在那里它们可能再次反射回到电离层,在那里它们可能再次反射回地球,等等,随着每个连续的…

    2022年6月5日
    40
  • 永久短网址生成 可以永久使用的短链接推荐

    永久短网址生成 可以永久使用的短链接推荐一、使用场景微博、短信、微信在推送信息的时候都有字符的数量限制,如果分享一个长网址,很容易就超出限制,发不出去。短网址服务可以把一个长网址变成短网址,方便在社交网络上传播。二、需求微信中链接过长容易被系统屏蔽,导致推送信息他人无法看到,或者是整个信息被收起来!短信、微博中字符数超级严格一旦超过了规定的字符数。就会导致信息发送失败!综上几个现在最长的场景,很显然,要尽可能的短…

    2022年5月31日
    254
  • 国二C语言:VC++2010学习版「建议收藏」

    国二C语言:VC++2010学习版「建议收藏」全国计算机等级考试二级C语言程序设计考试大纲(2019年版)指出:开发环境:MicrosoftVisualC++2010学习版。也就是说,不管你在学习过程中用的是什么样的开发环境…

    2022年4月20日
    338
  • 小组成员

    小组成员

    2021年11月18日
    50
  • hdu2058_upa68ha

    hdu2058_upa68ha主要是对于等差数列求和公式进行变换,dfs果断超时了;下面这个有比较详细的解释;(https://blog.csdn.net/qq_32767041/article/details/53457796)

    2022年10月2日
    3
  • origin画图怎么拟合曲线_origin拟合平滑曲线

    origin画图怎么拟合曲线_origin拟合平滑曲线需要用到matlab的拟合曲线中的smoothingspline功能,同时origin画的图又比较好看且可以后续做多条切线,因此记录下matlab与origin联合使用的方法,并加上用origin的tangent插件做曲线多条切线的方法。

    2022年9月21日
    5

发表回复

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

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