美文网首页
python学习笔记之--无处不在的else子句

python学习笔记之--无处不在的else子句

作者: itsenlin | 来源:发表于2022-04-16 19:32 被阅读0次

引言

前面在学习python基础知识的时候,学习到else分子不是条件分支独有的,在异常、循环语句中也可以看到else的使用。这对于从其他语言(特别是c/c++、java等)转过来的同学来说是一个“很特别”的特性。

刚开始学习python语言时,我也不太理解为什么要从语法层面增加这个“语法糖”,阅读了《编写高质量代码--改善python程序的91个建议》之后,才理解还是有几个场景可以通过else语句来简化,现记录下来以方便后续查阅,也加深理解。

场景一:else可以判断循环是否由break退出

经常有这样一种情况,通过循环来处理一堆数据,当满足一定的条件时调用break语句跳出循环。当没有else语句的时候,我们需要使用一个变量来判断循环是遍历结束,还是由break语句引发的结束。例如下面例子

def print_prime(n):
    for i in range(2, n):
        found = True
        for j in range(2, i):
            if i % j == 0:
                found = False
                break
        if found:
            print(f'{i} is a prime number')

print_prime(11)

很简单的一段代码,就是查找小于n的素数,这里需要一个变量found来判断是否找到(如果走到break就说明这个数不是素数)

我们把这个例子改成使用else分支,else分支只有在循环正常退出(这里通过break、异常等引发的退出都不属于正常退出)时才执行。也即能走else分支就说明此数为素数。改进后的代码如下:

def print_prime(n):
    for i in range(2, n):
        for j in range(2, i):
            if i % j == 0:
                break
        else:
            print(f'{i} is a prime number')

print_prime(11)

场景二:else可以判断try块中代码是否正常执行完成

这个场景实际上也跟循环类似,在异常场景下,只有当try语句块内的代码正常执行完成之后才会执行else分支。

注意:finally语句是不管try语句块代码是正常执行完,还是引发了异常,都会执行。也即能走else的代码流程,肯定能走finally,相反则不一定。

一般情况下,在异常处理的代码块中,只需要在正常执行完成之后才执行的代码可以放在else分支,例如书中说的数据库的事务提交动作。这里不再举例说明

总结

其实了解了else分支在循环、异常处理下的含义之后就可以很好的理解这个“语法糖”能使用的场景了

相关文章

网友评论

      本文标题:python学习笔记之--无处不在的else子句

      本文链接:https://www.haomeiwen.com/subject/vsphertx.html