目录
函数的参数
- 在定义函数时,可以在函数名后的()中定义数量不等的形参,
多个形参之间使用,隔开
- 形参(形式参数),定义形参就相当于在函数内部声明了变量,但是并不赋值
- 实参(实际参数)
- 如果函数定义时,指定了形参,那么在调用函数时也必须传递实参,
实参将会赋值给对应的形参,简单来说,有几个形参就得传几个实参
- 定义一个函数
定义形参时,可以为形参指定默认值
指定了默认值以后,如果用户传递了参数则默认值没有任何作用
如果用户没有传递,则默认值就会生效
- 函数在调用时,解析器不会检查实参的类型
实参可以传递任意类型的对象
- 在函数中对形参进行重新赋值,不会影响其他的变量
如果形参执行的是一个对象,当我们通过形参去修改对象时会影响到所有指向该对象的变量
实参的传递方式
- 位置参数
位置参数就是将对应位置的实参复制给对应位置的形参
第一个实参赋值给第一个形参,第二个实参赋值给第二个形参 。。。
- 关键字参数
关键字参数,可以不按照形参定义的顺序去传递,而直接根据参数名去传递参数
位置参数和关键字参数可以混合使用
混合使用关键字和位置参数时,必须将位置参数写到前面
fn(1,c=30)
不定长的参数(传递长度不固定的参数)
- 在定义函数时,可以在形参前边加上一个*,这样这个形参将会获取到所有的实参
它将会将所有的实参保存到一个元组中
a,b,*c = (1,2,3,4,5,6)
- *c会接受所有的位置实参,并且会将这些实参统一保存到一个元组中(装包)
带星号的形参只能有一个
带星号的参数,可以和其他参数配合使用
第一个参数给a,第二个参数给b,剩下的都保存到c的元组中
- 可变参数不是必须写在最后,但是注意,带*的参数后的所有参数,必须以关键字参数的形式传递
- 如果在形参的开头直接写一个*,则要求我们的所有的参数必须以关键字参数的形式传递
# def fn2(*,a,b,c):
print('a =',a)
print('b =',b)
print('c =',c)
# fn2(a=3,b=4,c=5)
- *形参只能接收位置参数,而不能接收关键字参数
- **形参可以接收其他的关键字参数,它会将这些参数统一保存到一个字典中
字典的key就是参数的名字,字典的value就是参数的值
- **形参只能有一个,并且必须写在所有参数的最后
参数的解包(拆包)
- 创建一个元组
t = (10,20,30)
- 传递实参时,也可以在序列类型的参数前添加星号,这样他会自动将序列中的元素依次作为参数传递
这里要求序列中元素的个数必须和形参的个数的一致
fn4(*t)
- 创建一个字典
d = {'a':100,'b':200,'c':300}
- 通过 **来对一个字典进行解包操作
fn4(**d)