美文网首页
装饰器 *arg **args

装饰器 *arg **args

作者: 心疼你萌萌哒 | 来源:发表于2018-07-17 15:24 被阅读0次

    用 * 收集位置参数

    In [91]: def print_args(*args):
        ...:     print('传入的位置参数会包含在一个元组里:',args)
        ...:
    # 情景 1
    In [92]: print_args(22,'192.168.1.10','yangge')
    传入的位置参数会包含在一个元组里: (22, '192.168.1.10', 'yangge')
    
    # 情景 2
    In [93]: li = [22,'192.168.1.10','yangge']
    
    In [94]: print_args(li)
    传入的位置参数会包含在一个元组里: ([22, '192.168.1.10', 'yangge'],)
    # 上面的这种方式是,每个实参对象作为元组的一个元素    
        
    # 玩点儿花活
    In [95]: print_args(*li)
    传入的位置参数会包含在一个元组里: (22, '192.168.1.10', 'yangge')
        
    In [102]: print_args(*'abc')
    传入的位置参数会包含在一个元组里: ('a', 'b', 'c')
    # 这也就是传说总元组解包的原理
    # 把一个可迭代对象中的每个元素作为元组的每一个元素
    

    用 ** 收集关键字参数

    def print_kwargs(**kwargs):
        print("接收的关键字参数,会是一个字典:", kwargs)
    print_kwargs(name='yangge')
    接收的关键字参数,会是一个字典: {'name': 'yangge'}
    
    In [105]: print_kwargs(ip='192.168.1.10', port=22)
    接收的关键字参数,会是一个字典: {'ip': '192.168.1.10', 'port': 22}
        
    # 同样可以玩点儿花活
    In [106]: dic = {'ip': '192.168.1.10', 'port': 22}
    
    In [107]: print_kwargs(**dic)
    接收的关键字参数,会是一个字典: {'ip': '192.168.1.10', 'port': 22}
    
    

    装饰器

    def outer(f):
        def inner(*arg):
            print("haha")
            f()
            print(arg)
            print("haha")
        return inner
    @outer
    def echo(*arg):
        print("gg")
    arg=[1,2,3]
    echo(*arg)
    
    def outer(f):
        def inner(*arg,**args):
            print("haha")
            f()
            print(arg,'and',args)
            print("haha")
        return inner
    @outer
    def echo(*arg,**args):
        print("gg")
    arg="helloworld"
    echo(*arg,ip='192.168.1.10', port=22)
    

    相关文章

      网友评论

          本文标题:装饰器 *arg **args

          本文链接:https://www.haomeiwen.com/subject/eaxgpftx.html