python函数参数详解



值传递和引用传递区别

如果你传入的参数对象是可变对象:列表,字典,这个时候就是引用传递。
如果你传入的参数对象是不可变的对象:数字,元组,字符串,这个时候就是值传递。

对于值传递,函数内部修改的是参数的副本,不会改变原值;
对于引用传递,函数内部修改了是变量的指向,从而相应对变量进行了改变。

举例如下:
当参数是不可变对象时:

>>> a = 10
>>> def change(a):
        a = 20
>>> change(a)
>>> a
10

当参数是可变对象时:
>>> b = [1,2,3]
>>> def change(b):
        b[0] = 0
>>> change(b)
>>> b
[0, 2, 3]

位置参数与关键字参数

当多个实参向多个形参传递,通常是根据位置来判断对应关系。

例如:5传递给了x,2传递给了y,1传递给了z:

>>> def yao(x, y, z):
        return x - y - z
>>> yao(5, 2, 1)
2

在传参时,指定参数名称,可以忽略位置因素。
例如:

>>> def yao(x, y, z):
        return x - y - z
>>> yao(z=1, y=2, x=5)
2

函数参数可以指定默认值。

例如:下面函数在指定了默认值后,如果在调用时没有传递相应参数,参数就会使用默认值。
>>> def yao(x=5, y=2, z=1):
        return x - y - z
>>> yao()
2


参数收集

通过在形参前放置一个*号,该形参就自动创建为一个元祖,可接收多个实参作为其元素。

举例如下:

>>> def yao(*params):
        print(params)
>>> yao(1,2,3,4,5)
(1, 2, 3, 4, 5)

推荐将该参数作为形参的最后一个参数,这样在前面形参参数接收完毕后,剩余的参数就都属于该参数的元素。
例如:

>>> def yao(x,y,*z):
        print(z)
>>> yao(1,2,3,4,5)
(3, 4, 5)

可以形参前加上**来接收关键字参数。该参数是字典形式。
例如:

>>> def yao(**params):
        print(params)
>>> yao(x=1, y=2, z=3)
{'x': 1, 'y': 2, 'z': 3}


参数分配

参数收集说的是,形参如何通过元组形式或字典形式接收多个实参。
参数分配说的是,一个元组形式的实参如何分配给多个形参。

具体操作方式与参数收集类似,具体是在实参传递时适用*号或**号。

例如:将元组传递给多个形参:

>>> def yao(x, y):
        return x + y
>>> params = (1, 2)
>>> yao(*params)
3

再例如,将字典传递给多个形参:
>>> def yao(x,y):
        return x + y
>>> params = {
	'y':1,
	'x':2
	}
>>> yao(**params)
3













猜你喜欢

转载自blog.csdn.net/weixin_41796207/article/details/80384212