写一个简单的函数代码:
def main():
sum = 0
try:
print("before return")
return sum
except Exception as e:
print(e)
finally:
print("end.")
sum = 8
if __name__ == '__main__':
print(main())
直接亮结果:
before return
end.
0
进程已结束,退出代码0
分析:
- 首先,代码不会在
try的return处直接返回,finall后面的代码是一定会执行的; - 明明在
finally那里重新赋值了sum啊,为什么结果还是打印0?
改一点代码,使用列表变量:
def main():
sum = 0
data = [1, 2]
try:
print("before return")
# return sum
return data
except Exception as e:
print(e)
finally:
print("end.")
sum = 8
data.append(3)
if __name__ == '__main__':
print(main())
这次finally改变data会生效吗?
运行结果:
before return
end.
[1, 2, 3]
进程已结束,退出代码0
生效了。
因为int变量的赋值是值传递,list变量的赋值是引用传递