不只是Python,编程路上这些编程技巧你应该掌握!

时间:2018-11-29 08:55:33   来源:上海尚学堂   阅读:
在编程的过程中,有很多技巧,但是若不注意,就很容易忽略,即使是高级程序员也会出现一些问题。今天,就几个编程技巧,进行一下总结,看看这些你是否有注意到?
 

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

 
在写if...elif...else语句时,可以根据判断条件出现的频率来调整顺序,使得出现频率越高的条件,越在前面。这样可以减少判断条件的次数,提高代码的性能与效率。
 
例如,在计算成绩的时候,大家都清楚成绩通常是正太分布的,所以先判断B和C时,能够减少判断的次数,提高代码效率,如下所示:

if score > 70 and score < 80:
    performance = "B"
elif score > 60 and score < 70:
    performance = "C"
elif score > 90:
    performance = "A"
else:
    performance = "D"

另外,大家应该都比较熟悉短路判断,即:
if A and B
如果A不满足的话,不再对B进行比较。所以,在写代码时,可以将不容易满足的条件设置为A,减少比较次数,提高代码效率。
 
同理,对于 
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)
 
采用动态规划来求解,算法代码如下:

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)

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

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代码可以如下:


def log2(x):
    import math
    return math.log(x)/math.log(2)


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

今天就讲一下这三个技巧,当然,还有很多技巧,后续还会继续讲解。联系客服小姐姐有免费的python学习资料教程,还有上海尚学堂Python培训免费试学机会,限量版哦!(本文选自 曹金龙 Python那些事)
 
上海尚学堂python培训给各位学员准备了《Python400集》等优秀的学习资料和视频教程,请联系客服小姐姐获取。另外Python培训班即将优势开启,还可以有少量的免费试学机会,也可以向客服申请。
分享:0

电话咨询

客服热线服务时间

周一至周五 9:00-21:00

周六至周日 9:00-18:00

咨询电话

021-67690939
15201841284

微信扫一扫