1 函数基础
1.1 什么是函数
函数可以理解为把一段重复要用的代码打包起来。以后想要执行这段功能,直接调用名字就行,不用反复复制粘贴代码,让代码更加整洁。
1.2 函数的定义与调用
使用def关键字定义函数,写完函数不会立刻运行,只有调用的时候才执行。
def hello(): print("大家好") # 调用函数 hello()1.3 函数的返回值
return用来把函数内部的数据传递到外面。函数执行到 return 就会结束运行。如果不写 return,函数默认返回 None。
def add(x,y): return x+y res = add(2,3) print(res)2 函数参数
2.1 位置参数
调用函数时,传入的数据会按照顺序一一对应,顺序不能随便调换。
def fun(a,b): print(a,b) fun(10,20)2.2 默认参数
定义函数的时候,可以给参数提前设置好值。调用时不传这个参数,就自动使用默认值。
def fun(a,b=5): print(a+b) fun(10)2.3 关键字参数
调用函数时,写明参数名字,不用严格遵守顺序。关键字参数要放在位置参数后面。
def fun(a,b): print(a,b) fun(b=1,a=2)2.4 可变参数
*args:接收任意多个位置参数,最终保存成元组**kwargs:接收任意多个关键字参数,最终保存成字典
def fun(*args,**kwargs): print(args) print(kwargs) fun(1,2,3,name="小明")2.5 参数解包
如果我们有列表、元组、字典,可以使用*和**把里面的数据拆开,传给函数。
def fun(a,b): print(a,b) lst = [1,2] fun(*lst)3 变量作用域
3.1 局部变量与全局变量
写在函数外面的变量是全局变量,整个程序都能访问。 写在函数内部的变量是局部变量,只能在这个函数里面使用,函数外面无法访问。
3.2 global 与 nonlocal
global:在函数内部修改全局变量。nonlocal:在内层函数中修改外层函数的变量,不作用于全局。
3.3 globals () 与 locals ()
globals()查看当前所有全局变量locals()查看当前作用域内所有局部变量
4 特殊函数
4.1 匿名函数
使用lambda快速创建简单函数,适合功能很短的代码,不需要写 def。
f = lambda x:x+1 print(f(5))4.2 高阶函数
可以接收另一个函数作为参数,或者把函数当做返回值,这类函数就是高阶函数。
4.3 递归函数
函数自己调用自己,使用递归一定要设置结束条件,不然会无限循环报错。
def num(n): if n == 1: return 1 return n * num(n-1)5 闭包与装饰器
5.1 闭包
内层函数使用外层函数的变量,并且外层函数返回内层函数,这样的组合就是闭包。闭包可以保存外层函数的变量状态。
5.2 装饰器
装饰器本质是高阶函数,可以在不修改原有函数代码的前提下,给函数增加新功能。
5.3 装饰器常用案例
日常可以用来实现运行时间统计、权限校验、日志记录等功能。