形式参数与实际参数
值传递与引用传递
如果在函数调用时,不使用变量的形式,而直接使用值,这时实参是匿名的,传递过程相当于形参赋值。如下代码。
为了深入理解这两种传递方式,无疑首先要搞清楚不可变数据类型和可变数据类型在程序运行时有什么不同。请看下面的代码和运行结果。
从运算结果上可以看到,不可变数据类型的内存地址是与值关联的,不管用什么变量名称,它都不会改变;可变数据类型的内存地址是与变量关联的,尽管值相等,但如果用不同的赋值语句创建的变量,它的内存地址是不同的。
我们知道,程序是不可能直接把值从实参传递到形参的,都是把实参的内存地址传递给函数的形参。如果实参是不可变数据类型,那么形参得到的是与值关联的内存地址,从而形参与实参就没有任何关系了,所以形参改变不会影响实参;如果实参是可变数据类型,那么形参得到的是与实参关联的内存地址,从而形参与实参就建立了联动关系,所以形参改变实参也同样改变了。简单地说:可变数据类型的实参会把自己传给函数的形参;不可变数据类型的实参只把值传给函数的形参。请看下面的例子。
位置参数
关键字参数
默认参数
例题
练习题
第一题:
第二题:
第三题: