前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >编程路上,必不可少的编程技巧

编程路上,必不可少的编程技巧

作者头像
测试小兵
发布2019-11-20 22:43:25
3720
发布2019-11-20 22:43:25
举报
文章被收录于专栏:猪圈子猪圈子

-Tester-也哥-

在编程的过程中,有很多技巧,但是若不注意,就很容易忽略,即使是高级程序员会出现一些问题。今天,就几个编程技巧,进行一下总结,看看这些你是否有注意到?

根据出现的频率来调整判断条件的顺序

在写if...elif...else语句时,可以根据判断条件出现的频率来调整顺序,使得出现频率越高的条件,越在前面。这样可以减少判断条件的次数,提高代码的性能与效率。

例如,在计算成绩的时候,大家都清楚成绩通常是正太分布的,所以先判断B和C时,能够减少判断的次数,提高代码效率,如下所示:

代码语言:javascript
复制
if score > 70 and score < 80:
    performance = "B"
elif score > 60 and score < 70:
    performance = "C"
elif score > 90:
    performance = "A"
else:
    performance = "D"

另外,大家应该都比较熟悉短路判断,即:

代码语言:javascript
复制
if A and B

如果A不满足的话,不再对B进行比较。所以,在写代码时,可以将不容易满足的条件设置为A,减少比较次数,提高代码效率。

同理,对于

代码语言:javascript
复制
if A or B

当A满足条件时,则不执行B。所以,大家在写代码时,可以将容易满足的条件放在A,而不容易满足的放在B,减少比较次数,提升代码质量。

采用缓存的机制

相信缓存大家已经很熟悉了,Redis,MemoryCache等都是经典的缓存实现,但是在代码中如何利用缓存呢?

这里,最经典的就是动态规划。

看这样一个问题:一个楼梯有10级,每次走1级或两级,请问从底走到顶一共有多少种走法?比如,每次走1级台阶,一共走10步,这是其中一种走法。我们可以简写成 1,1,1,1,1,1,1,1,1,1。再比如,每次走2级台阶,一共走5步,这是另一种走法。我们可以简写成 2,2,2,2,2。当然,除此之外,还有很多很多种走法。

很容易将问题建立模型为:

F(1) = 1

F(2) = 2

F(n) = F(n-1) + F(n-2) (3 <= n <= 10)

采用动态规划来求解,算法代码如下:

代码语言:javascript
复制
def climbStairs(n):
    """
    计算n级台阶的走法,每次可走1步或者2步
    :param n: 台阶总数
    :return: n级台阶的走法
    """
    if n < 1:
        return 0
    elif n == 1:
        return 1
    elif n == 2:
        return 2
    else:
        return climbStairs(n - 1) + climbStairs(n - 2)

熟悉递归调用的同学知道,这样会有很多重复计算。那么,如何避免重复计算呢?答案很简单,就是在代码中采用缓存的机制,当然,也有一些说法是备忘录机制,大同小异了。算法代码如下:

代码语言:javascript
复制
def climbStairs(n, value):
    """
    计算n级台阶的走法,每次可走1步或者2步
    :param n: 台阶总数
    :param value: 存储各个不同台阶走法的dict
    :return: n级台阶的走法
    """
    if value.get(n) is not None:
        return value.get(n)
    else:
        if n < 1:
            value[n] = 0
        elif n == 1:
            value[n] = 1
        elif n == 2:
            value[n] = 2
        else:
            value[n] = climbStairs(n - 1, value) + climbStairs(n - 2, value)

        return value[n]

另外,在一些计算过程中,对于需要频繁计算的结果,也可以采用这种缓存机制,能够较好的提升代码效率。

简化相关的数学运算

在编程的过程中,可能会遇到一些数学方面的计算,如果不做简化的话,将会降低代码的效率。这里比如说,大家都清楚 log()方法返回x的自然对数,对于x>0。但是如果要求以2为底的对数该怎么办呢?

通常,根据公式 logb(x) = log(x)/log(b),所以,Python代码可以如下:

代码语言:javascript
复制
def log2(x):
    import math
    return math.log(x)/math.log(2)

实现是没有问题的,但是效率呢?必然会很低。因为每次都会计算log(2),势必会增大运算量。如何降低运算量呢?很简单,将math.log(2)的结果设置为一个常量即可。

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-01-28,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 Python测试社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com