• *和**说明


    1.站在形参的角度看 *
    形参中的*会将多余的(溢出的)位置实参 统一用元组的形式处理 传递给*后面的形参名
    def func(x,y,*z):
        print(x,y,z)  # z = (3, 4, 5, 6, 7, 8, 54, 43, 4, 5, 6, 6, 7, 8)
    func(1,2,3,4,5,6,7,8,54,43,4,5,6,6,7,8,)
    2.站在实参的角度看 *
    def func(x,y,z):
        print(x,y,z)
    # l = [1,2,3]
    # a,b,c = l
    # func(a,b,c)
    # func(*[1,2,3,4,5,6])  # *会将列表打散成位置实参一一传入等价于func(1,2,3,4,5,6)
    func(*(1,2,3))  # 等价于func(1,2,3)
    def func(x,*z):
        print(x,z)
    func(1,*{1,2,3})  # *在形参中只能接收多余的位置实参 不能接收关键字实参
    *只能将列表 元组 集合 字符串
    *的内部你可以看成是for循环
    3.站在形参的角度看**
    def func(x,y,**z):
        print(x,y,z)  # z = {'z': 1, 'a': 1, 'b': 2, 'c': 3}
    func(x=1,y=2,z=1,a=1,b=2,c=3)
    **会接收所有多余的关键字参数 并将关键字参数 转换成字典的形式 字典的key就是关键字的名字
    字典的value就是关键字的名字指向的值  将字典交给**后面的变量名
    4.站在实参的角度看 **
    func(12,3,4)
    func(x=1,y=2,z=3)
    d = {'x':1,'y':2,'z':333}
    func(x=1,y=2,z=3)
    func(**d)  # 等价于func(x=1,y=2,z=333)
    **会将字典拆封成 key = value的形式
    5.总结
    *在形参中能够接受多余的位置参数 组织成一个元祖赋值给*后面的变量名
    **在形参中能够接受多余的关键字参数 组织成一个字典赋值给**后面的变量名
    *:在实参中 *能够将列表 元祖 集合 字符串 打散成位置实参的形式传递给函数
    (*就看成是for循环取值)
    **:在实参中 能将字典打散成key = value的形式 按照关键字参数传递给函数
    需求 你写的函数 无论调用者按照正确传参的方式无论怎么传 你的函数都能够正常执行
    def func1(*x,**y):
        print(x,y)
    func1(1,2,3,4,5,6,x=1,y=2,z = 3)
    注意python推荐形参*和**通用的写法
    def func2(*args,**kwargs):
        print(args,kwargs)
    func2(1,2,3,4,5,6,x=1,y=2,z = 3)
  • 相关阅读:
    [原创]java WEB学习笔记26:MVC案例完整实践(part 7)---修改的设计和实现
    [原创]java WEB学习笔记25:MVC案例完整实践(part 6)---新增操作的设计与实现
    [原创]java WEB学习笔记24:MVC案例完整实践(part 5)---删除操作的设计与实现
    [原创]java WEB学习笔记23:MVC案例完整实践(part 4)---模糊查询的设计与实现
    Tapestry IoC Configuration
    Tapestry IoC Decorator
    Tapestry IoC Service
    Tapestry-Again
    mysql error nr.1045 解决方法
    Bootstrap学习 导航
  • 原文地址:https://www.cnblogs.com/cmd61/p/11158281.html
Copyright © 2020-2023  润新知