首页 > 编程 > Python > 正文

浅析Python中return和finally共同挖的坑

2020-02-16 02:06:00
字体:
来源:转载
供稿:网友

前言

本文主要给大家介绍了在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 !            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表