一、简介
函数就是把重复的代码,封装到一起。后续使用时,直接找函数。可以增加代码的模块化和提高代码的重复利用率。
二、定义函数
格式:
def 函数名([参数1,参数2,...]):
函数体(重复的代码)
注意:
1、必须使用关键字def
2、函数体注意缩进
3、函数名()绑定
三、命名规范
与字符串命名类似。
四、调用
调用:函数名()
注意:有参数要传参数
五、形参与实参
形参:形式上的参数
实参:实际的参数,具体的值
六、可变参数 *args
拆包和装包
参数有可变参数和不可变参数时,可变参数要放在最后。
七、关键字参数和默认值参数
默认值参数:key = value
给函数一个默认值。
关键字参数:**kwargs
默认转成字典保存。
八、返回值 return
返回值:把需要返回的结果,用return抛出来
1、return后面可以是一个参数
2、return后面也可以是多个参数,如果有多个,会存放到一个元组里返回
3、接收的时候也可以多个
九、全局变量和局部变量
1、全局变量global
2、局部变量仅限于函数内部使用。
3、全局变量如果是不可变在函数中进行修改需要添加global关键字,如果是可变的,在函数中修改时不需要添加global。
十、内部函数
特点:
1、可以访问外部函数的变量
2、内部函数可以修改外部函数的可变类型的变量
3、内部函数修改全局的不可变变量时,需要在内部函数声明global 变量名
4、内部函数修改外部函数的不可变的变量时,需要在内部函数声明nonlocal 变量名
5、使用locals()内置函数进行查看,可以看到当前外部函数里声明的内容,返回的是一个字典
6、使用globals()查看全局变量有哪些,返回的是一个字典
十一、闭包
在函数中提出的概念。
条件:
1、外部函数中定义了内部函数
2、外部函数是有返回值
3、返回值是内部函数名,务必不能加括号(加了括号就是调用了函数)
4、内部函数引用了外部函数的变量值
格式:
def 外部函数():
xxx
def 内部函数():
xxx
return 内部函数
缺点:
1、作用域没有那么直观
2、因为变量不会被垃圾回收,所以有一定的内存占用问题
作用:
1、可以使用同级的作用域
2、读取其他元素的内部变量
3、延长作用域
总结:
1、闭包似优化了变量,原来需要类对象完成的工作,闭包也可以完成
2、由于闭包引用了外部函数的局部变量,则外部函数的局部变量没有及时释放,消耗内存
3、闭包的好处,使代码变得简洁,便于阅读代码
4、闭包是理解装饰器的基础
十二、装饰器
1、用法:@函数名
2、步骤:
a、装饰器下的函数被称为被装饰函数
b、被装饰器函数会作为参数传给装饰器函数
c、执行装饰器函数,将返回值传给被装饰函数,实际是闭包里的内部函数
3、万能装饰器,就是传参是传*args,**kwargs
4、有多层装饰器时,优先执行离被装饰函数近的装饰器
5、装饰器传参,只要带参数的,装饰器就装了三层;不带参数的装饰器,就是两层
# 第一层
def outer(a):
# 第二层
def decorate(func):
# 第三层
def wrapper(*args,**kwargs):
func(*args)
xxx
return wrapper
return decorate
十三、匿名函数
作用:简化函数定义
格式:lambda 参数1, 参数2 :运算
s = lambda a,b:a+b
#调用
s(1,2)
特点:
1、匿名函数可以作为参数出现
# 求最大值
list2 = [{'a':19,'b':20},{'a':222,'b':21},{'a':32,'b':32},{'a':214,'b':21}]
s = max(list2,key=lambda x:x['a'])
print(s)
# 求最小值 min
# 对列表进行操作的map
list1 = [1,2,3,4,2,4,6,7,8,2]
s = map(lambda x:x+1,list1)
print(list(s))
# lambda的if,对列表的奇数进行+1
res =map(lambda x : x if x%2==0 else x+1,list1)
print(list(res))
十四、内置函数
filter()、sorted()、reduce()
reduce()函数,对列表中的元素进行加减乘除运算的函数
from functools import reduce
tuple1 = (3,4,5,6,7,8)
# 加法
reduce(lambda x,y:x+y,tuple1,初始值)
# 减法、乘法、除法等类似
filter()函数,过滤作用
list1 = [1,2,3,22,1,21,32]
s = filter(lambda x:x>10,list1)
print(list(s))
sorted()函数
s = sorted(list1,key=lambda x:x,reverse=True)
十五、递归函数
普通函数的一种表现形式,简单的话就是函数自己调用自己。
特点:
1、递归函数务必要设定终点
2、通常都会有一个入口
def sum(n):
if n == 0;
return 0
else:
return n+sum(n-1)