1、拆包、*args、**kwargs
*args是可变参数,接收的是一个tuple;
**kwargs是关键字参数,接收的是一个dict。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
def test(a,b,*args,**kwargs): print(a) print(b) print(args) print(*args) print(kwargs) test(1,2,3,4,name='5',age=6) 运行结果: 1 2 (3, 4) 3 4 {'name': '5', 'age': 6}
2、闭包:延伸了作用域的函数,访问定义体之外定义的非全局变量
(1)外函数返回内函数的结果
(2)外函数将临时变量传递给内函数
(3)外函数无法改变局部变量的值,需要用nonlocal才可修改
3、装饰器
多个装饰器的情况下,下面的装饰器先执行
functool.lru_cache(maxsize,typed)
singledipatch
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
def f(func): #闭包 def call_f(*args,**kwargs): print(1) print(2) return func(*args,**kwargs) #拆包 return call_f @f #装饰器,test = f(test) def test(num,*args,**kwargs): print(num) print(args) print(kwargs) return 'ok','ok' #返回元组 ret = test(100) print(ret) ##1 ##2 ##100 ##() ##{} ##('ok', 'ok')