zoukankan      html  css  js  c++  java
  • python-8:函数之二 *args, **kwargs

    #形参*args:收集参数
    # 功能1:收集除位置参数外的所有参数,以元组形式返回;
    # 功能2:实参以'*'和'可迭代类型'一起的形式,如*[],*(),*{},*"...",传入时,
    # *args,星号'*'的作用,用来解析'可迭代类型'中元素,放入元组,实质是循环取得'可迭代类型'中每个元素,存入元组
    #注意,*{'a':1,'b':2},为字典时,得到的是key值,如a,b;**{'a':1,'b':2},获得键值对,如a=1,b=2
    def test1(x,y,*args,**kwargs):# x,y,位置参数,*args,收集参数,收集除位置参数外的所有参数,以元组形式返回
    print('x=',x)
    print('args=',args)
    print('len=',len(args))
    print('kwargs=',kwargs)
    print('kw_len=',len(kwargs))
    test1(2,1,[3,4,5],(7,8),9,10,*'abcd',*['ag',123,'b'],*('c','d'),*{11,22,33},*{'key1':'v1'},m=12,**{'k':'v','k1':'v1'})
    #运行结果:
    # x= 2
    # args= ([3, 4, 5], (7, 8), 9, 10, 'a', 'b', 'c', 'd', 'ag', 123, 'b', 'c', 'd', 33, 11, 22, 'key1')
    # len= 17
    # kwargs= {'m': 12, 'k': 'v', 'k1': 'v1'}
    # kw_len= 3

    ***********************************************************************************************************************
    #形参**kwargs:仅收集映射,如:关键字参数(x=3,y=5),实质也是键值对形式;**字典参数(**{})
    #以字典形式返回
    def test2(m,n,**kwargs):
    print('m=',m)
    print('kwargs=',kwargs)
    print('len=',len(kwargs))
    test2(1,2,x=3,y=5,**{'k':'v','k2':5})
    # 运行结果:
    # m= 1
    # kwargs= {'x': 3, 'y': 5, 'k': 'v', 'k2': 5}
    # len= 4

    def f(x,y,z,f=5,*args,**kwargs):#位置,关键字,默认,可变参数(包裹参数),键值对可变参数
    print ('x=%s,y=%s,z=%s,f=%s,args=%s,kwargs=%s'%(x,y,z,f,args,kwargs))
    f(1,2,[1,2],4,5,['a','b'],*[4,5],j=9,n=10,**{'k':8,'m':3})
    #返回:x=1,y=2,z=[1, 2],f=4,args=(5, ['a', 'b'], 4, 5),kwargs={'j': 9, 'n': 10, 'k': 8, 'm': 3}
    #注:*[],**{},星号,是用来用包裹,获取包裹在里面的数,
    #注:关键字参数,如z=8,和**kwargs,键值对包裹参数,不能同时使用
    #注:默认参数,只编译一次,如fn(var,list=[]),编译时,生成一个list=[]对象,如果不传递默认参数,每次都引用这个共同的list=[]的对象
    def fn(var,list=[]):
    list.append(var)
    print(list)
    a=fn('10')
    b=fn('k') #['10','k']



  • 相关阅读:
    给pdf文件添加防伪水印logo(附工程源码下载)
    关于正则,那些年一直存在的疑惑解答(正则菜鸟不容错过)
    那些年用过的一些前端框架
    优化Javascript数据遍历
    PHP5 mysqli 教程
    程序员一年工作经验之谈
    TCP协议的性能评测工具 — Tcpdive开源啦
    VMware Tools (ubuntu系统)安装详细过程与使用
    利用BBRSACryptor实现iOS端的RSA加解密
    Spring AOP详解(转载)
  • 原文地址:https://www.cnblogs.com/Zhouzg-2018/p/9692795.html
Copyright © 2011-2022 走看看