1、拆包、*args、**kwargs

*args是可变参数,接收的是一个tuple;

**kwargs是关键字参数,接收的是一个dict。

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

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')
总结示范

 

posted on 2020-03-25 10:51  喻解  阅读(113)  评论(0编辑  收藏  举报