finally: python中的值传递和引用传递
finally: python中的值传递和引用传递

finally: python中的值传递和引用传递

写一个简单的函数代码:

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

分析:

  1. 首先,代码不会在try的return处直接返回,finall后面的代码是一定会执行的;
  2. 明明在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变量的赋值是引用传递

发表回复

您的电子邮箱地址不会被公开。