一、什么是函数
函数类似于一种工具,可以重复调用。
二、为什么要用函数
防止代码的冗余;代码的可读性差。
三、使用方法
3.1
1 定义函数----->make a wapen
2 调用函数----->use it
## 函数的命名规范和变量名一样,需要具有意义。
四、函数的三种分类
4.1 无参函数
def func(): #()没有参数
print('hello world')
func()
4.2 空函数
deffunc2():pass #代码块先用pass代替, 空函数
func2()
4.3 有参函数
def func1(a,b): #()有参数, 有参函数
print(a,b)
func1(1,2) #a= 1 b =2
4.4把函数名赋值给变量
deffunc3():print('小猪皮蛋')
f= func3 #通过把函数名赋值给变量f,调用f也能调用函数
f()
五、函数的返回值
5.1 不写return:返回none
defu():print(1)#u() # 1
print(u()) #None
5.2 只写return:只有结束代码的效果,返回none
defu():print(1)return
#u() # 1
print(u()) #None
5.3 写return none:与上一条一样效果
defu():print(1)returnNone#u() # 1
print(u()) #None
5.4 return 返回一个值:可以将返回的结果当做一个变量名使用
defs(a,b):returna,b
s(1,2) #看不见结果
d = s(1,2) #把函数的结果给变量d就可以看见结果
print(d) #(1, 2)
5.5 return 返回多个值:  5.5.1 将返回的多个值默认存入元祖返回
5.5.2 函数的返回不想被修改
5.5.3 可以自己指定返回的类型
deffunc1():return 1, "2"
print(func1()) #(1, '2') 返回元祖
a = 1b= 2c= '3'd= [4, 5]
e= {'name': 'sean'}deffunc(a, b, c, d, e):returna, b, c, d, eprint(func(a, b, c, d, e)) #(1, 2, '3', [4, 5], {'name': 'sean'}) #返回指定类型
## return 是函数结束的标志,函数体代码,只要执行return,函数就执行结束。
六、函数的参数
6.1 参数类型
形参: 函数在定义阶段就规定的参数,相当于定义变量时的变量名。
实参: 函数在调用阶段传入的参数,相当于定义变量时的变量值。
def foo(a): #a就是形参
print(a)
foo(1) #1就是实参
6.2 传参方式
6.2.1  位置参数: 通过位置进行传参。
defs(a,b):returna,bprint(s(1,2)) #(1, 2) a=1 b=2
6.2.2  关键字参数: 指定参数进行传参。
defs(a,b):returna,bprint(s(b=1,a=2)) #(2, 1) b=1,a=2
6.2.3  默认参数: 在定义函数阶段就已经传入参数,如果在实参时传入一个新参数,就会使用新参数。***不能将可变类型当参数传递。
def s(a,b,c=3):returna,b,c
s(1,2)print(s(1,2)) #(1, 2, 3)默认把c=3也传出来
def s(a,b,c=3):returna,b,c#s(1,2,c=4)
print(s(1,2,c=4)) #(1, 2, 4)指定c=4时,就把指定值传出来
6.2.4  可变长参数
6.2.4.1  *args : 接收所有溢出的位置参数,接收的值都被存入一个元祖。
示范:


解决方法:
#*args
def f(a,b,*args): #接收溢出位置参数
print(a,b,args) #args 会把溢出的参数存入一个元祖
f(1,2,3,4,5) #1 2 (3, 4, 5)
def f(a,b,*args): #接收溢出位置参数
print(a,b,*args) #args 会把溢出的参数打散
f(1,2,3) #1 2 3
6.2.4.2 **kwargs  : 接收所以溢出的关键字参数,接收的值都被存入一个字典。
示范:


解决方法:
#**kwargs
def f(a, b, **kwargs):print(a, b, kwargs) #kwargs: 会把溢出的参数以字典返回
f(1, 2, c=3) #1 2 {'c': 3}
def f(a, b, **kwargs): #接收溢出关键字参数
print(a, b, *kwargs) #*kwargs 会把溢出的参数以字典中的key返回
f(b=1, a=2, c=3) #2 1 c
##  * 的作用: 打散你传入的容器类型