Python 带星号(* 或 **)的函数参数详解
1.带默认值的参数
在了解带星号(*)的参数之前,先看下带有默认值的参数,函数定义如下:
>>defdefaultValueArgs(common,defaultStr="default",defaultNum=0): print("Commonargs",common) print("DefaultString",defaultStr) print("DefaultNumber",defaultNum)
(1)带默认值的参数(defaultStr、defaultNum)不传参时的调用:
>>defaultValueArgs("Test") CommonargsTest DefaultStringdefault DefaultNumber0
(2)带默认值的参数(defaultStr、defaultNum),调用的时候可以直接传参(如下例中的defaultStr),也可以写成“argsName=value”的形式(如下例中的defaultNum):
>>defaultValueArgs("Test","Str",defaultNum=1) CommonargsTest DefaultStringStr DefaultNumber1 >>defaultValueArgs("Test",defaultNum=1) CommonargsTest DefaultStringdefault DefaultNumber1
注意:在函数定义时,第一个带有默认值的参数之后的所有参数都必须有默认值,否则,运行时报错。
>>defdefaultValueArgs(common,defaultStr="default",defaultNum): print("Commonargs",common) print("DefaultString",defaultStr) print("DefaultNumber",defaultNum) SyntaxError:non-defaultargumentfollowsdefaultargument
2.带一个星号(*)的函数参数
带一个参数的函数定义如下:
>>defsingalStar(common,*rest): print("Commonargs:",common) print("Restargs:",rest)
(1)带星号(*)的参数不传参:
>>singalStar("hello") Commonargs:hello Restargs:()
带星号(*)的参数不传参时默认是一个空的元组。
(2)带星号(*)的参数传入多个值时(个数大于或等于函数定义时的参数个数):
>>singalStar("hello","world",000) Commonargs:hello Restargs:('world',0)
不难看出,第二种方式中,星号参数把接收的多个参数合并为一个元组。
(3)当我们直接传元组类型的值给星号参数时:
>>singalStar("hello",("world",000)) Commonargs:hello Restargs:(('world',0),)
此时,传递的元组值作为了星号参数的元组中的一个元素。
(4)如果我们想把元组作为星号参数的参数值,在元组值前加上"*"即可。
>>singalStar("hello",*("world",000)) Commonargs:hello Restargs:('world',0) >>singalStar("hello",*("world",000),"123") Commonargs:hello Restargs:('world',0,'123')
3.带两个星号(**)的函数参数
带两个星号(**)的函数定义如下:
>>defdoubleStar(common,**double): print("Commonargs:",common) print("Doubleargs:",double)
(1)双星号(**)参数不传值:
>>doubleStar("hello") Commonargs:hello Doubleargs:{}
带双星号(**)的参数不传值时默认是一个空的字典。
(2)双星号(**)参数传入多个参数时(个数大于或等于函数定义时的参数个数):
>>doubleStar("hello","Test",24) TypeError:doubleStar()takes1positionalargumentbut3weregiven >>doubleStar("hello",x="Test",y=24) Commonargs:hello Doubleargs:{'x':'Test','y':24}
可以看到,双星号参数把接收的多个参数合并为一个字典,但与单星号不同的是,此时必须采用默认值传参的“args=value”的方式,“=”前的字段成了字典的键,“=”后的字段成了字典的值。
(3)如果想把字典作为星号参数的参数值,那么该怎么办呢?与单星号参数类似,在字典值前加上“**”,同时其后不能添加任何值。
>>doubleStar("hello",{"name":"Test","age":24}) TypeError:doubleStar()takes1positionalargumentbut2weregiven >>doubleStar("hello",**{"name":"Test","age":24},{"name":"Test2","age":24}) SyntaxError:positionalargumentfollowskeywordargumentunpacking >>doubleStar("hello",**{"name":"Test","age":24},**{"name":"Test2","age":24}) TypeError:doubleStar()gotmultiplevaluesforkeywordargument'name' >>doubleStar("hello",**{"name":"Test","age":24}) Commonargs:hello Doubleargs:{'name':'Test','age':24}
4、在有些情况下,单星号函数参数和双星号函数参数是一起使用的:
defsingalAndDoubleStar(common,*single,**double): print("Commonargs:",common) print("Singleargs:",single) print("Doubleargs:",double) singalAndDoubleStar("hello") #Commonargs:hello #Singleargs:() #Doubleargs:{} singalAndDoubleStar("hello","world",000) #Commonargs:hello #Singleargs:('world',0) #Doubleargs:{} singalAndDoubleStar("hello","world",000,{"name":"Test","age":24}) #Commonargs:hello #Singleargs:('world',0,{'name':'Test','age':24}) #Doubleargs:{} singalAndDoubleStar("hello","world",000,**{"name":"Test","age":24}) #Commonargs:hello #Singleargs:('world',0) #Doubleargs:{'name':'Test','age':24} singalAndDoubleStar("hello",("world",000),{"name":"Test","age":24}) #Commonargs:hello #Singleargs:(('world',0),{'name':'Test','age':24}) #Doubleargs:{} singalAndDoubleStar("hello",*("world",000),{"name":"Test","age":24}) #Commonargs:hello #Singleargs:('world',0,{'name':'Test','age':24}) #Doubleargs:{} singalAndDoubleStar("hello",*("world",000),**{"name":"Test","age":24}) #Commonargs:hello #Singleargs:('world',0) #Doubleargs:{'name':'Test','age':24}
到此这篇关于Python带星号(*或**)的函数参数详解的文章就介绍到这了,更多相关Python带星号参数内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。