当前位置 博文首页 > 孤寒者的博客:一节课让你彻底搞懂python中的单星号(*)和双星

    孤寒者的博客:一节课让你彻底搞懂python中的单星号(*)和双星

    作者:[db:作者] 时间:2021-07-25 21:59

    引言——同学们是不是经常可以在python的函数中看到输入的参数前面有一个或者两个星号(如下图:),却不是很明白他们的作用。那么今天这节课就来带领大家深入探讨一下。

    def function1(param1, *param2):
    def function2(param1, **param2):
    

    其实这俩的用法都是用来将任意个数的参数传入到python函数中,但是它们两个的应用场景及某些细分的作用又有所不同哦!

    需要注意的是:我们在探讨单星号和双星号的作用时,要分两种情况-----1.在定义函数的时候使用(为了收集参数);2.在调用函数的时候使用(为了分配参数,即所谓的拆包!)

    1.单星号(*):*agrs

    (1)定义函数时使用:将参数以元组(tuple)的形式导入(收集参数)!

    上代码1:

    def fun1(*args):          #*可以接收任意多个
        print(args)           #此处的args又把接收的任意多个数据放为一个整体:元组中
    
    fun1(1,2,3,4,5,6,6)
    # 输出为:(1, 2, 3, 4, 5, 6, 6)
    

    上代码2:

    # 单星号的使用:
    def fun3(world,*value):    # 注意使用单星号的参数要放在其他参数之后!
        print(world)
        print(value)
    
    fun3('cool',1,2,3,4,5,6,1,7,8,98)
    # 输出为:cool
    #       (1, 2, 3, 4, 5, 6, 1, 7, 8, 98)
    

    (2)调用函数时使用:拆包(分配参数)!

    上代码1:

    #拆包
    def fun1(*args):          #*可以接收任意多个
        print(args)           #此处的args又把接收的任意多个数据放为一个整体:元组中
        print(*args)          #此处的*又把args接收的那个元组整体拆分为一个一个的
    
    fun1(1,2,3,4,5,6,6)
    # 输出为:(1, 2, 3, 4, 5, 6, 6)
    #        1 2 3 4 5 6 6
    

    上代码2:

    def myprint(x, y):
        print(x)
        print(y)
    
    params=(1,2)
    myprint(*params)
    # 输出为:1
    #        2
    

    2.双星号(**):**kwargs

    (1)定义函数时使用:将关键字参数以字典(dic)的形式导入(收集参数)!

    上代码1:

    def fun2(**kwargs):
        print(kwargs)
    
    fun2(a = 1 , b = 2)       #因为上面有**,所以把参数a = 1和b = 2转换为{}的形式
    # 输出为:{'a': 1, 'b': 2}
    

    上代码2:

    ## 双星号(**)的使用:
    def function(key, **kwargs):
        print(key)
        print(kwargs)
    
    function('aaa', a = 1, b = 2, c = 3)
    # 输出为:aaa
    #       {'a': 1, 'b': 2, 'c': 3}
    

    (2)调用函数时使用:拆包(分配参数)!

    上代码1:

    def myprint(x, y):
        print(x)
        print(y)
    
    params={'x':1,'y':2}      
    myprint(**params)        # 此句等同于: myprint(x = 1, y = 2)
    # 输出为:1
    #        2
    
    

    上代码2:

    def fun2(**kwargs):
        print(kwargs)
    
    fun2(a = 1 , b = 2)               #因为上面有**,所以把a = 1和b = 2的形式转换为{}的形式
    fun2(**{'a':1, 'b': 2})           #把{}的形式拆包为 a = 1, b = 2的形式,此方法等同上一句代码,但是可以直接传字典格式数据而不用特意改变了!
    # 输出为:{'a': 1, 'b': 2}
    #       {'a': 1, 'b': 2}
    
    # 小知识点:
    # a = 1 < ==== > {'a':1}   可以相互转换
    

    3.混合使用

    # *和**的混合使用:
    def fun4(*name,**value):
        print(name)
        print(value)
    
    fun4('key', 'beautiful', a = 1, b = 2)
    # 输出为:('key', 'beautiful')
    #        {'a': 1, 'b': 2}
    

    4.拓展——实战项目中单星号的使用!

    a = [ [7, 17146.16129032258], [8, 26092.645161290322], [9, 26865.633333333335], [10, 35460.67741935484], [11, 51436.166666666664]]
    
    # *a的作用将变量a拆包为一个个的列表;
    print(*a)
    
    # zip()函数的作用是:将对象逐一配对,*zip()的作用就是拆包:将一一对应的5个列表数据拆分为一一对应的两个列表数据!
    x_unique, y_mean = [*zip(*a)]
    print(x_unique)
    print(type(x_unique))
    
    print(y_mean)
    print(type(y_mean))
    

    在这里插入图片描述

    cs