一节课让你彻底搞懂python中的单星号(*)和双星号(**)的区别及项目实际用法——给我学!

280 阅读3分钟

【摘要】 一节课让你彻底搞懂python中的单星号(*)和双星号(**)的区别及项目实际用法——给我学!

引言——同学们是不是经常可以在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))

image.png 此文章转自华为云