python——函数总结
函数总结:
1,什么是函数?
- 减少代码的重复性
- 增强代码的可读性
2,函数的结构
def 函数名():
pass
3,函数的执行(调用)
- 函数名()
4,函数的返回值
-
没有return 返回的是None
-
有return 返回单个值 与单个值的数据类型相同
-
return 多个值 1,‘alex',[1,2,3] 以元组的形式返回 (1,‘alex',[1,2,3] )
-
函数的参数:
-
形参
-
位置参数,从左至右,一一对应
-
默认参数,传值覆盖,不传则默认
-
万能参数,*args , **kwargs ,尽量使用这个,易扩展
-
仅限关键字参数,*args和**kwargs中间
-
#仅限关键字参数 def func(a,b,*args,c): print(a,b) print(c) func(1,2,3,4,5,c=666) #1 2 # 666 -
形参角度顺序:位置参数,*args,默认参数,仅限关键字参数,**kwargs
-
-
实参
- 位置参数,从左至右,一一对应
- 关键字参数:关键字不加’‘,必须一一对应
- 混合参数:既有位置参数,又有关键字参数,位置参数一定要在前面,必须一一对应
-
*的魔性用法
- 函数的定义:*聚合
- 函数的调用:*打散
#* # a,b=(1,2) 拆包的概念 a,b,*c=(1,2,3,4,5,6,7,8) print(a,b,c)#1 2 [3, 4, 5, 6, 7, 8] a,*b,c=(1,2,3,4,5,6,7,8) print(a,b,c) #1 [2, 3, 4, 5, 6, 7] 8
-
-
空间角度
- 空间
- 全局作用域
- 内置名称空间
- 全局名称空间
- 局部作用域
- 局部名称空间
- 全局作用域
- 取值顺序和加载顺序
- 加载顺序:内置----》全局----》局部
- 取值顺序:就近原则,LEGB原则
- 空间
-
函数的嵌套:遇到函数名()执行该函数
-
global
- 局部名称空间声明一个全局变量
- 在局部修改全局变量
def func(): global name name='alex' func() print(name) -
nonlocal
- 不能操作全局变量
- 内层函数对外层函数的变量进行修改,用nonlocal
def func1(): name='太白' def inner(): nonlocal name name='alex' print(name) inner() print(name) func1() # 太白 # alex -
函数名的应用
- 函数名就是变量
- 函数名对应的是函数的内存地址
- 函数名可以作为容器类型的元素
- 函数名可以作为函数的参数传递
- 函数名可以作为函数的返回值
-
函数的三大器
- 迭代
- 迭代器
- 字面意思:重复更新迭代的工具
- 专业角度:内部含有__iner__方法,并且含有__next__方法
- 优点:
- 节省内存
- 惰性机制
- 不走回头路
- 缺点:
- 操作方法较少
- 不直观
- 以时间换空间,查询速度较慢
- 可迭代对象
- 字面意思:重复的更新的迭代数据
- 专业角度:内部含有__iner__方法。
- 可迭代对象:dict.list,tuple,str,set,range
- 优点:
- 直观
- 操作方便
- 缺点:
- 占用内存
- 迭代器
- 迭代
-
生成器
- 本质就是迭代器
- 唯一的不同是生成器是自己用python代码构建的
- 生成器的三种产生方式
- 生成器函数,函数中含有yield的
- 生成器表达式,
- 循环模式:变量(加工后的变量) for 变量 in iterable
- 筛选模式:变量(加工后的变量) for 变量 in iterable if 条件表达式
- python提供的
- 列表推导式
- 循环模式:变量(加工后的变量) for 变量 in iterable
- 筛选模式:变量(加工后的变量) for 变量 in iterable if 条件表达式
-
装饰器
- 本质就是闭包,在不改变原函数的代码以及调用方式的前提下,给其增加新的额外的功能
- 满足开放封闭原则
- 装饰器的基本结构
def warpper(f): def inner(*args,**kwargs): ret=f(*args,**kwargs) return ret return inner- 应用:登录认证,打印日志等等
-
闭包
- 闭包的定义
- 存在嵌套函数中
- 内层函数对外层函数非全局变量的引用
- 好处:
- 对于引用的这个自由变量,不会在内存中消失,保证数据安全
- 闭包的定义
def wrapper(a):
name='太白'
def inner():
print(a)
print(name)
return inner
ret=wrapper('烧饼') #inner
ret()#太白
print(ret.__code__.co_freevars) #获取自由变量的变量
#('a', 'name')
- 内置函数

浙公网安备 33010602011771号