函数:
- 参数:
1.位置参数:在传值时必须按照严格的位置顺序传参
def add(a,b):
return a+b
add(10,30)
2.默认值参数:在定义形参时,就给参数设置一个默认值,这样在传递实参时,可以不给默认值参数赋值在默认值参数后不能跟位置参数
def add(a,b,c=10):
print(a)
print(c)
print(b)
add(1,2)
3如果默认值是一个变量,形参在定义函数的时候就已经确定了就算改变在函数中改变新参的默认值在输出后也不会改变
def add(a, b=30, c=d):
global d # 这里用关键字修改全局变量的值d
d=20 # 此时全局变量d为20
print(a)
print(b)
print(c)# c的值有200变为20
add(10,2);# 如果在调用的时候给了第三个值则打印的c的值就为第三个值
print(d) # 此时打印的值为全局变量d因为被关键字global修改了所以d的值为20
4.传值和传地址是不一样的:
因为python中相同的变量再次赋值后,不是从新开辟一段内存空间而是在原来的内存空间上修改原来的值
5.可变参数:在形参的参数名前增加一个星号,该形参就是可变参数,用来接受其他不能接受的实参,用元组来包裹这些额外的实参,可变参数可以接受任意数量的实参
print(a)
print(b)
print(c)# 其中c打印的为一个元组接受实参中多余的参数
print(d) # d为关键字参数传参形参可以接受
add(23,13,12,2,d=12)
6.实参拆解:
如果要传递的实参已经在一个列表或元组中,则在传递该实参时,可以 在参数名前加星号,实现参数拆解
剩下的元素打包为元组,赋给可变参数
def add(a, c, *b, z=10):
print(a)
print(c)
print(b)# b为元组的形式
print(z)
add(*arr, z=17)# z为关键字参数
7.关键字参数:在传递实参时,给实参指定一个形参中对应的参数名。这样实参的值一定会赋给指定的形参
关键字参数的有点:
1、传参时不用考虑参数的位置
2.如果其他类型参数(如:可变参数)后,跟了位置参数,则可以通过关键字参数为这个位置参数传值
3,关键字参数扩展:通过关键字参数来接收不确定数量的实参。函数定义时,在关键字参数扩展的形参,名前添加两个星号,在传参时,通过关键字参数,吧不确定个数的实参传递进关键字参数中,通过字典来维护这些不确定个数的实参
``def add(a,b,**c):
print(a)
print(b)
print(c)# c打印出来的是一个字典类型
add(12,b=13,name='张三',age='4')
**8.**命名关键字参数:这里传的实参都是相对于字典中的key值,是唯一的;
```def add(a,b,*,age,gender):
print(a)
print(b)
print(age)
print(gender)
add(10,20,age=12,gender='男');
打印的结果是:
10
20
12
男
总结:组合使用以上类型的参数,那么参数的排列顺序是:必选参数(位置参数)、默认参数、可变参数、命名参数、或关键字参数或关键字参数扩展