• 命名关键字


    # ### 命名关键字
    '''
    # 语法:
    def func(参数1,参数2,*,参数3,参数4):
    	pass
    (1)在函数的定义处,* 号后面的参数就是命名关键字参数
    (2)在函数的定义处,在普通收集参数和关键字收集参数之间的是命名关键字参数 
    def func(*arg,命名关键字参数,**kwargs)
    
    命名关键字必须使用关键字实参的形式进行调用
    '''
    # 形式1
    def func(a,b,*,c):
    	print(a,b,c)
    func(1,2,c=4)
    
    # 形式2
    '''
    如果命名关键字指定了默认值,那么在调用时,
    可以不指定实参.默认使用自己的值
    '''
    def func(a,b,*,c=5):
    	print(a,b,c)
    func(1,2,c=6)
    
    # 形式3
    def func(*arg,d,**kwargs):
    	print(arg) # 1 2 23
    	print(kwargs) # {c:1,f:2}
    	print(d) # d = 3
    func(1,2,23,c=1,f=2,d=3)
    """
    (4)*和**的魔术用法:打包和解包 
        *和**,在函数的定义处,负责打包(把实参都收集过来,放在元组或字典中)
        *和**,在函数的调用处,负责解包(把容器类型的数据,一个一个拿出来,进行传递)
    """
    
    def func(a,b,c):
    	print(a,b,c)
    
    listvar = [1,2,3]
    # *一般修饰列表更多一些 (负责把列表里面的元素一个一个拿出来的进行函数调用)
    func(*listvar) # <==>  func(1,2,3)
    
    def func(a,b,c,*,d,e,f):
    	print(a,b,c)
    	print(d,e,f)
    listvar = [1,2,3]
    dic = {"d":4,"e":5,"f":6} # func(d=4,e=5,f=6)
    # **一般修饰字典,(负责把字典里面的键值对变成d=4,e=5的形式,进行函数调用)
    func(1,2,3,**dic) # <==> d=4 , e = 5 , f = 6
    # * 和 ** 的解包操作
    func(*listvar,**dic)
    	
    
    # 函数参数的默认顺序:
    '''
    必须按照如下的参数顺序进行定义:
    普通形参(位置形参) -> 默认形参 -> 普通收集参数 -> 命名关键字参数 -> 关键字收集参数
    '''
    def f1(a, b, c=0, *args, **kw):
        print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
    
    def f2(a, b, c=0, *, d, **kw):
        print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)
    
    #(一)
    # f1(1, 2) #a=1,b=2,c=0 args=(),kw={}
    # f1(1, 2, c=3) #a=1,b=2,c=3,args=(),kw={}
    # f1(1, 2, 3, 'a', 'b') #a=1,b=2,c=3,args=(a,b),kw={}
    # f1(1, 2, 3, 'a', 'b', x=99) #a=1,b=2,c=3,args=(a,b),kw={'x':99}
    # f2(1, 2, d=99, ext=None) # a=1,b=2,c=0,d=99,kw={'ext':None}
    
    #(二)
    args = (1, 2, 3, 4)
    kw = {'d': 99, 'x': '#'}
    f1(*args, **kw) # a=1,b=2,c=3,args=(4,),kw={"d":99,"x":"#"}
    # *args <==> f1(1,2,3,4)
    # **kw <==> f1(d=99,x="#")
    
    #(三)
    def f2(a, b, c=0, *, d, **kw):
        print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)
    myargs = (1, 2, 3)
    mykw = {'d': 88, 'x': '#'}
    f2(*myargs, **mykw) #a=1,b=2,c=3,d=88,kw={"x":"#"}
    
    #(四)
    # 定义处
    def f1(a, b, c=0, *args,d,**kw):
        print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
        print(d)
    # 调用处
    f1(1,2,3, 'a', 'b',d=67, x=99,y=77)#a=1,b=2,c=3,args=(a,b) kw={x:99,y:77} d=67
    
    # 普通收集形参 和 关键字收集形参 可以接受到所有种类的参数
    # *args,**kwargs 都是可变长参数,参数的长度不限制
    def func(*args,**kwargs):
    	pass
    

      

  • 相关阅读:
    C#基础 const和readonly关键字
    C#基础 base与this关键字
    ASP.NET Web Form 与 ASP.NET MVC 区别
    qt 零星笔记
    我应该记录一下我不太了解的一些c语言函数
    Linux学习书籍推荐
    更改arch的默认终端
    让arch阻止某个软件包的升级
    python pachong zhuanzai
    从贴吧看的逆向网络协议过程逆向校园网客户端
  • 原文地址:https://www.cnblogs.com/huangjiangyong/p/10829100.html
Copyright © 2020-2023  润新知