前言
本文主要给大家介绍了在Python中return和finally共同存在的坑,以及填坑经验,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
初识 return
相信每一个用过Python函数的童鞋, 肯定会用过return语句, return顾名思义, 就是用来返回值给调用者, 例如:
def test(): a = 2 return as = test()print s# 输出结果2
对于上面的结果, 相信大家都不会感到意外, 那么加大点难度, 如果在return语句还有代码呢? 那句代码会怎样呢?
def test(): a = 2 return a s = 3 print ss = test()print s# 结果是什么?
老司机肯定一眼就能看出结果, 但是对于尚在入门或者对return不很了解的童鞋, 可能就会懵逼了~ 后面的两句代码是否会被执行?
答案是: 不会执行
return正如它的名字那样, 当执行这句代码, 整个函数都会返回, 整个调用就算结束了~ 所以在return后面的代码, 都是不会被执行的!
也正因为这个特性, 所以有种编码规范叫early return的编码规范就被倡导
它的意思大概就是: 当条件已经满足返回时, 就马上返回
举个例子来说明:
def test(): a = 2 if a > 2: result = 'more than' else: result = 'less than' return results = test()print s
上面的代码应该比较容易理解, 就是根据a的值, 来决定返回的result是什么. 这样的编码相信也是大部分童鞋喜欢用的, 因为这样比较符合我们直觉, 然而, 这样写似乎有点浪费, 因为当第一个判断结束了, 如果结果为真, 就应该返回more than, 然后结束函数, 否则肯定就是返回less than, 所以我们可以把代码调整成这样:
def test(): a = 2 if a > 2: return 'more than' else: return 'less than's = test()print s
甚至是:
def test(): a = 2 if a > 2: return 'more than' return 'less than's = test()print s
结果都是和第一个写法是一样的! 第一次看到这样写法的童鞋, 可能会觉得比较难以接受, 甚至觉得可读性很差, 但是其实这样的写法, 我觉得反而会稍微好点. 因为:
运行的代码数少了, 调用方能更快得到结果 有利于减少嵌套的层数, 便于理解.对于第2点在这需要解释下, 很多时候我们写得代码, 嵌套很深, 都是因为if/else的锅, 因为嵌套的if/else 比较多, 所以导致一堆代码都嵌套得比较深, 这样对于其他小伙伴, 简直就是灾难, 因为他们很可能在阅读这部分代码时, 就忘了前面的逻辑....
为了更加容易理解, 举个代码例子:
def test(): a = 2 if a > 2: result = 'not 2' else: a += 2 if a < 2: result = 'not 2' else: for i in range(2): print 'test ~' result = 'Target !' return results = test()print s# 输出结果test ~test ~Target !
新闻热点
疑难解答