网站首页 > 技术文章 正文
作者:麦叔
来源:麦叔编程
一直以来,我的理解是:
return语句是函数的终结,一旦遇到return,函数马上就结束返回了。
直到认真学习了try...except...finally异常处理才发现并不总是这样的。但这个问题你真的理解吗?
return语句和finally语句到底谁先执行呢?
可能没有你想象的那么简单!
finally语句
来看这段代码例子:
def play_numer():
number_list = []
while True:
print('-----------------')
try:
number = input('输入一个数字:')
print(int(number)/2)
if number == '886':
return
except Exception as e:
print(f'出错了:{e}')
finally:
number_list.append(number)
print(number_list)
play_numer()
执行结果如下:
-----------------
输入一个数字:123
61.5
['123']
-----------------
输入一个数字:321
160.5
['123', '321']
-----------------
输入一个数字:886
443.0
['123', '321', '886']
从结果可以看出,就算遇到了886,也在退出之前成功打印了包含886的列表。这似乎说明:
finally语句先执行,然后再执行return语句。
推翻认知的例子
我们现在修改一下代码,会推翻之前的理解:
def play_numer():
number_list = []
while True:
print('-----------------')
try:
number = input('输入一个数字:')
print(int(number)/2)
if number == '886':
return number_list.append('return')
except Exception as e:
print(f'出错了:{e}')
finally:
number_list.append(number)
print(number_list)
play_numer()
代码几乎和前面一样,唯一的区别是在return语句中执行了这个操作:number_list.append('return')。
看看打印结果:
-----------------
输入一个数字:123
61.5
['123']
-----------------
输入一个数字:321
160.5
['123', '321']
-----------------
输入一个数字:886
443.0
['123', '321', 'return', '886']
完全一样的输入,看看最后一条打印结果:字符串return在886之前被加入到了列表,这似乎又说明:
return语句在finally之前执行,和前面的结论相反。
结论
这个问题的关键在于认识到:
return语句包含两部分,一部分return关键字后的表达式,比如number_list.append('return'),另一部分是return本身,也就是退出函数的操作。
所以正确的顺序是:
return表达式,finally语句块,return操作
- 上一篇: EXCEL函数-IF函数
- 下一篇: Python 内联 If 语句使用指南
猜你喜欢
- 2025-03-11 Excel数据查找匹配再添新成员:TEXTJOIN+IF
- 2025-03-11 Excel进阶神器!IF函数高阶用法全解析,打工达人必备!
- 2025-03-11 最常用函数IF多种应用解密
- 2025-03-11 Cursor使用指南:释放AI编程的无限潜能
- 2025-03-11 web前端tips:使用 forEach 循环中的 return 语句会发生什么?
- 2025-03-11 Excel技巧:关于IF函数的典型用法(一)
- 2025-03-11 办公必备的多条件统计函数公式,直接套用,请收好备用
- 2025-03-11 Excel神器IF函数用法大全,打工人效率翻倍全靠它!
- 2025-03-11 当你与这几个函数公式成功牵手后,就会发现,原来Excel也很有趣
- 2025-03-11 Excel函数if多个条件并列怎么输入?来看看并列条件的公式分解
- 03-12我实现了Java多返回值
- 03-12Python 函数中的 4 种参数类型
- 03-12「洞唐Coder」自学Python编程的第0021天:自定义函数(下)
- 03-12Python函数的10个级别,你达到了第几级?
- 03-12Python中的元组和列表的相同点和不同点是啥呢么?
- 03-12Python有序对象元组处理技术
- 03-12Python 中的函数和模块
- 03-12震惊!Python中定义函数竟然这样用,你知道吗?
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)