• Python函数参数传递机制(超级详细)

    Python中,函数参数由实参传递给形参的过程,是由参数传递机制来控制的。通过学习《Python函数值传递和引用传递》一节我们知道,根据实际参数的类型不同,函数参数的传递方式分为值传递和引用传递(又称为地址传递),本节将对这两种传递机制做深度剖析。

    Python函数参数的值传递机制

    所谓值传递,实际上就是将实际参数值的副本(复制品)传入函数,而参数本身不会受到任何影响。

    值传递的方式,类似于《西游记》里的孙悟空,它复制一个假孙悟空,假孙悟空具有的能力和真孙悟空相同,可除妖或被砍头。但不管这个假孙悟空遇到什么事,真孙悟空都不会受到任何影响。与此类似,传入函数的是实际参数值的复制品,不管在函数中对这个复制品如何操作,实际参数值本身不会受到任何影响。

    下面程序演示了函数参数进行值传递的效果:

    def swap(a , b) :
        # 下面代码实现a、b变量的值交换
        a, b = b, a
        print("swap函数里,a的值是", \
            a, ";b的值是", b)
    a = 6
    b = 9
    swap(a , b)
    print("交换结束后,变量a的值是", \
        a , ";变量b的值是", b)

    运行上面程序,将看到如下运行结果:

    swap函数里,a的值是 9 ;b的值是 6
    交换结束后,变量a的值是 6 ;变量b的值是 9

    从上面的运行结果来看,在 swap() 函数里,a 和 b 的值分别是 9、6,交换结束后,变量 a 和 b 的值依然是 6、9。从这个运行结果可以看出,程序中实际定义的变量 a 和 b,并不是 swap() 函数里的 a 和 b 。

    正如前面所讲的,swap() 函数里的 a 和 b 只是主程序中变量 a 和 b 的复制品。下面通过示意图来说明上面程序的执行过程。

    上面程序开始定义了 a、b 两个局部变量,这两个变量在内存中的存储示意图如图 1 所示。


    主栈区中 a、b 变量存储示意图
    图 1 主栈区中 a、b 变量存储示意图

更多...

加载中...