gpt4 book ai didi

python - 最终总是在try block 中的return之前运行,那么为什么finally block 中的更新不影响try block 返回的变量的值?

转载 作者:行者123 更新时间:2023-12-01 07:54:52 25 4
gpt4 key购买 nike

如下例所示,finally块仅在try块中的return语句之前运行,如以下示例所示-返回False而不是True:

>>> def bool_return():
... try:
... return True
... finally:
... return False
...
>>> bool_return()
False
同样,以下代码返回在Finally块中设置的值:
>>> def num_return():
... try:
... x=100
... return x
... finally:
... x=90
... return x
...
>>> num_return()
90
但是,对于在finally块中没有return语句的变量赋值,为什么try块不返回由finally块更新的变量值? 是否来自finally块的变量在finally块中局部作用域?还是try块的返回值保存在内存缓冲区中,而不受final块中的赋值影响? 在下面的示例中,为什么输出100而不是90?
>>> def num_return():
... try:
... x=100
... return x
... finally:
... x=90
...
>>> num_return()
100

最佳答案

一个有助于确认其他人回答的小实验是将x替换为单值列表,如下所示:

def num_return():
try:
x=[100]
return x
finally:
x[0] = 90
现在返回的值为 [90],因此确实在finally块中修改了列表。
但是,如果返回 x[0],则会得到 100(即使我们仅基于列表本身在finally块中发生更改的事实)。

In [1]: def num_return():
...: try:
...: x=[100]
...: return x
...: finally:
...: x[0] = 90
...:

In [2]: num_return()
Out[2]: [90]

In [3]: def num_return():
...: try:
...: x=[100]
...: return x[0]
...: finally:
...: x[0] = 90
...:

In [4]: num_return()
Out[4]: 100

关于python - 最终总是在try block 中的return之前运行,那么为什么finally block 中的更新不影响try block 返回的变量的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62678765/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com