1.参数类别
形式参数:简称形参,在定义函数时,函数名后面小括号中自定义的参数就是形式参数。
实际参数:简称实参,在调用函数时,函数名后面小括号中传入的参数值就是实际参数。
2.函数中参数传递方式
python 值传递和引用传递是根据实际参数的类型不同进行区分的,如下所示:
值传递:指的是实参类型为不可变类型(数字、字符串、元组);
引用传递(或叫地址传递):指的是实参类型为可变类型(列表,字典,set 集合,np矩阵,torch.tensor矩阵)。
值传递和引用传递的区别如下所示: 函数参数进行值传递后,若形参的值发生改变,不会影响实参的值;
函数参数进行引用传递后,若形参的值发生改变,实参的值也会一同改变。
def fun1(num, dict_, list_):
print('形参id: ', id(num), id(dict_), id(list_))
num = 1
dict_[str(num)] = num
list_.append(num)
if __name__ == '__main__':
print()
num = 1
a = {
}
b = []
print('原始id: ', id(num), id(a), id(b))
for i in range(5):
print('实参id: ', id(num), id(a), id(b))
print('i:%i,\n' % i, '函数执行前 num: ', num, 'a: ', a, 'b: ', b)
fun1(num, a, b)
print('函数执行后 num: ', num, 'a: ', a, 'b: ', b, '\n')
结果:
原始id: 140715259541520 2565483473640 2565482238344
实参id: 140715259541520 2565483473640 2565482238344
i:0,
函数执行前 num: 1 a: {
} b: []
形参id: 140715259541520 2565483473640 2565482238344
函数执行后 num: 1 a: {
'2': 2} b: [2]
实参id: 140715259541520 2565483473640 2565482238344
i:1,
函数执行前 num: 1 a: {
'2': 2} b: [2]
形参id: 140715259541520 2565483473640 2565482238344
函数执行后 num: 1 a: {
'2': 2} b: [2, 2]
实参id: 140715259541520 2565483473640 2565482238344
i:2,
函数执行前 num: 1 a: {
'2': 2} b: [2, 2]
形参id: 140715259541520 2565483473640 2565482238344
函数执行后 num: 1 a: {
'2': 2} b: [2, 2, 2]