找回密码
 会员注册
查看: 41|回复: 0

python之单星号()与双星号()详解

[复制链接]

2万

主题

0

回帖

7万

积分

超级版主

积分
71619
发表于 2024-9-6 16:02:20 | 显示全部楼层 |阅读模式
本章将详细介绍python中*与**操作符的使用场景以及注意事项,并给出示例demo。1.作为运算符        *表示乘法运算        **表示乘方运算    代码示例:#1.***作为运算符print('\n------运算符测试------')a=3*2#乘法b=3**2#乘方print("a=",a)#输出6print("b=",b)#输出9'运行运行执行结果:2.作为函数形参        *在python中做函数形参,表示的是一个可变长度的序列,类型为tuple,即将所有参数放入一个元组(tuple)中,被函数使用。        **在python中做函数形参,表示的是一个可变长度的序列,类型为dict,即将所有的关键字参数,放入一个字典(dict)中,被函数使用。        *与**作为形参同时出现时,**必须在最后面.        代码示例:#2.作为形参print('\n------形参测试------')defprintx(*arg1,**arg2):print("arg1={0},type:{1}".format(arg1,type(arg1)))print("arg2={0},type:{1}".format(arg2,type(arg2)))#调用P1=printx(1,2,key1=1,key2=2)'运行运行代码执行结果:3.作为函数实参        在list/tuple/set前加*,会把序列中的所有元素解包成位置参数        在dict前加*,会把dict的键变成位置参数;加**,把字典的键值对变成关键字参数。        A=(a,b,c)        B={“key1” :1,“key2”:2}        3=Printx(*A)  #等同于printx(a,b,c)        3=Printx(*A,*B)  #等同于printx(a,b,c,key1,key2)        3=Printx(*A,**B)  #等同于printx(a,b,c,key1=1,key2=2)        代码示例:defprintx(*arg1,**arg2):print("arg1={0},type:{1}".format(arg1,type(arg1)))print("arg2={0},type:{1}".format(arg2,type(arg2)))#3.实参测试print('\n------实参测试------')A=(1,2,3)K1={'key1':1,'key2':2}P2=printx(*A,*K1)#注意在dict前加一个*,只把dict的'键'作为位置参传递print('')P3=printx(*A,**K1)'运行运行执行结果:4.作为序列解包        注意序列解包时*解包为list,不再是tuple了    1.先对不带*的变量解包,剩余的数据在划分给带*的变量        x,y,*z=1,2,3,4,5#等同于x=1,y=2,z=[3,4,5]        X,*y,z=1,2,3,4,5#等同于x=1,y=[2,3,4],z=5    2.如果左值比右值要多,那么带*的变量默认为空列表        x,y,*z=1,2#等同于x=1,y=2,z=[]         x,*y,z=1,2 #x=1,y=[],z=2    3.单*只解包dict的键,**解包dict键值对        key_A={‘key1’:1,‘key2’:2}        key_B={“key3” :3,“key4”:4}        X={*key_A} #等同于x={‘key1’,’key2’}        X={**key_A} #等同于x={‘key1’:1,‘key2’:2}        X={**key_A,**key_B}#等同于组包,x={‘key1’:1,‘key2’:2,“key3” :3,“key4”:4}         注意:组包时,若键相同,则用后面的键值替换前面的,即最终合并后,为后面的键值对。代码示例:        #4.解包测试print('\n------解包测试------')x,y,*z=1,2,3,4,5print("x={0},y={1},z={2}".format(x,y,z))x,*y,z=1,2,3,4,5print("x={0},y={1},z={2}".format(x,y,z))x,*y,z=1,2print("x={0},y={1},z={2}".format(x,y,z))x,y,*z=1,2print("x={0},y={1},z={2}".format(x,y,z))#解包&组包K2={'key3':3,'key4':4}K3={'key5':5,'key6':6}k4={**K2,**K3}print("k4=",k4)'运行运行 执行结果:注意        在Python中默认的函数参数顺序是:必选参数、默认参数、*args和**kwargs。如下所示:        def testFunc(name,age=10,*agrs,**kwargs):                pass 整体测试代码:importtorch#1.***作为运算符print('\n------运算符测试------')a=3*2#乘法b=3**2#乘方print("a=",a)#输出6print("b=",b)#输出9#2.作为形参print('\n------形参测试------')defprintx(*arg1,**arg2):print("arg1={0},type:{1}".format(arg1,type(arg1)))print("arg2={0},type:{1}".format(arg2,type(arg2)))#调用P1=printx(1,2,key1=1,key2=2)#3.实参测试print('\n------实参测试------')A=(1,2,3)K1={'key1':1,'key2':2}P2=printx(*A,*K1)#注意在dict前加一个*,只把dict的'键'作为位置参传递print('')P3=printx(*A,**K1)#4.解包测试print('\n------解包测试------')x,y,*z=1,2,3,4,5print("x={0},y={1},z={2}".format(x,y,z))x,*y,z=1,2,3,4,5print("x={0},y={1},z={2}".format(x,y,z))x,*y,z=1,2print("x={0},y={1},z={2}".format(x,y,z))x,y,*z=1,2print("x={0},y={1},z={2}".format(x,y,z))#解包&组包K2={'key3':3,'key4':4}K3={'key5':5,'key6':6}k4={**K2,**K3}print("k4=",k4)运行结果:
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-10 05:39 , Processed in 0.813901 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表