文章源自略懂百科-http://wswcn.cn/111214.html
作者:麦叔文章源自略懂百科-http://wswcn.cn/111214.html
来源:麦叔编程文章源自略懂百科-http://wswcn.cn/111214.html
一直以来,我的理解是:文章源自略懂百科-http://wswcn.cn/111214.html
❝文章源自略懂百科-http://wswcn.cn/111214.html
return语句是函数的终结,一旦遇到return,函数马上就结束返回了。文章源自略懂百科-http://wswcn.cn/111214.html
❞文章源自略懂百科-http://wswcn.cn/111214.html
直到认真学习了try...except...finally异常处理才发现并不总是这样的。但这个问题你真的理解吗?文章源自略懂百科-http://wswcn.cn/111214.html
❝文章源自略懂百科-http://wswcn.cn/111214.html
return语句和finally语句到底谁先执行呢?文章源自略懂百科-http://wswcn.cn/111214.html
❞文章源自略懂百科-http://wswcn.cn/111214.html
可能没有你想象的那么简单!文章源自略懂百科-http://wswcn.cn/111214.html
finally语句
来看这段代码例子:文章源自略懂百科-http://wswcn.cn/111214.html
defplay_numer():number_list = []whileTrue:
print(-----------------)try:
number = input(输入一个数字:)
print(int(number)/2)ifnumber ==886:returnexceptExceptionase:
print(f出错了:{e})finally:
number_list.append(number)
print(number_list)文章源自略懂百科-http://wswcn.cn/111214.html
play_numer()文章源自略懂百科-http://wswcn.cn/111214.html
执行结果如下:文章源自略懂百科-http://wswcn.cn/111214.html
-----------------输入一个数字:123
61.5[123]-----------------输入一个数字:321
160.5[123,321]-----------------输入一个数字:886
443.0[123,321,886]文章源自略懂百科-http://wswcn.cn/111214.html
从结果可以看出,就算遇到了886,也在退出之前成功打印了包含886的列表。这似乎说明:文章源自略懂百科-http://wswcn.cn/111214.html
❝文章源自略懂百科-http://wswcn.cn/111214.html
finally语句先执行,然后再执行return语句。文章源自略懂百科-http://wswcn.cn/111214.html
❞文章源自略懂百科-http://wswcn.cn/111214.html
推翻认知的例子
我们现在修改一下代码,会推翻之前的理解:文章源自略懂百科-http://wswcn.cn/111214.html
defplay_numer():number_list = []whileTrue:
print(-----------------)try:
number = input(输入一个数字:)
print(int(number)/2)ifnumber ==886:returnnumber_list.append(return)exceptExceptionase:
print(f出错了:{e})finally:
number_list.append(number)
print(number_list)文章源自略懂百科-http://wswcn.cn/111214.html
play_numer()文章源自略懂百科-http://wswcn.cn/111214.html
代码几乎和前面一样,唯一的区别是在return语句中执行了这个操作:number_list.append(return)。文章源自略懂百科-http://wswcn.cn/111214.html
看看打印结果:文章源自略懂百科-http://wswcn.cn/111214.html
-----------------输入一个数字:123
61.5[123]-----------------输入一个数字:321
160.5[123,321]-----------------输入一个数字:886
443.0[123,321,return,886]文章源自略懂百科-http://wswcn.cn/111214.html
完全一样的输入,看看最后一条打印结果:字符串return在886之前被加入到了列表,这似乎又说明:文章源自略懂百科-http://wswcn.cn/111214.html
❝文章源自略懂百科-http://wswcn.cn/111214.html
return语句在finally之前执行,和前面的结论相反。文章源自略懂百科-http://wswcn.cn/111214.html
❞文章源自略懂百科-http://wswcn.cn/111214.html
结论
这个问题的关键在于认识到:文章源自略懂百科-http://wswcn.cn/111214.html
❝文章源自略懂百科-http://wswcn.cn/111214.html
return语句包含两部分,一部分return关键字后的表达式,比如number_list.append(return),另一部分是return本身,也就是退出函数的操作。文章源自略懂百科-http://wswcn.cn/111214.html
❞文章源自略懂百科-http://wswcn.cn/111214.html
所以正确的顺序是:文章源自略懂百科-http://wswcn.cn/111214.html
❝文章源自略懂百科-http://wswcn.cn/111214.html
return表达式,finally语句块,return操作文章源自略懂百科-http://wswcn.cn/111214.html
❞文章源自略懂百科-http://wswcn.cn/111214.html
文章源自略懂百科-http://wswcn.cn/111214.html
评论