函数
-
函数的语法
def 函数名(形参1,形参2...): 代码块
函数创建好之后,必须调用函数,否则,函数没有返回值,就没有任何意义了。
def fn(): print('123')
def fn(): print('123') fn()
-
函数的参数
- 形参
定义参数相当于在函数内部声明了变量,但是并不是赋值 - 实参
指定了行参,那么在调用时就必须传递实参,实参将会赋值给对应的形参,有几个形参就要传递几个实参。
- 形参
-
参数的传递方式
-
默认值传递
在定义形参时,可以指定默认值,如果用户没有传递参数,那么默认值就会生效,反之,就不会生效。def fn (a=2,b=5): print('a=',a) print('b=', b) fn(1,2) # 控制台输出为a=1 b=2
def fn (a=2,b=5): print('a=',a) print('b=', b) fn() # 控制台输出为a=2 b=5
-
位置传递
将对应位置的实参赋值给对应位置的形参。def fn (a,b): print('a=',a) print('b=', b) fn(1,2)
-
关键字传递
关键字参数可以不按照定义形参的顺序进行传递,而根据参数名进行传递,(注意!!)当混合使用位置参数和关键字参数时,必修将位置参数写带关键字参数的前面。def fn(a,b,c): print('a =',a) print('b =',b) print('c =',c) fn(c=10,a=5,b=3)
-
-
参数的类型
- 实参可以传递任意类型的对象
-
不定长参数
- 定义参数
- 定义参数时,可以在形参前面加一个*,这样的话,这个形参就可以获得所有的实参,它会将所有的实参保存在一个元组中
- 带*号的参数的形参只能是一个,可以和其他参数配合使用
- 带*号(*参数)的行参只能接受位置参数,不能接受关键字参数。
- *a处理的是位置参数
- **形参
- 可以接受关键字参数,并且将接受到的参数白痴到字典中,。字典的key就是参数的名称,value就是参数的值。
- **(参数)处理的是关键字参数
- **(形参)只有一个,并且必须写在所有参数的后面
def fn(a,*b): print('a =', a) print('b =',b) fn(1,2,3,4,5)
def fn(a,**b): # 如果**参数在第一个会报错 print('a =', a) print('b =',b) fn(a=20,b =10)
- 定义参数
-
参数的解包
- 传递实参时,也可以在序列类型的参数前加星号,这样它就会自动的将序列中的元素依次作为参数传递进去
- 但是有一点要求,就是序列中的元素的个数必须与形参的个数保持一致。