python代码,如何利用单星号解压list/tuple类型数据?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
python
编程语言,在函数定义的时候,形参前面有个(双)星号。在函数调用的时候,实参前面也有个(双)星号。这就涉及到了一个传参解压功能,也就是本文所主要描述的问题。本文主要描述单星号解压list
/tuple
类型数据。
大家好,这里是苏南大叔的程序如此灵动博客,记录苏南大叔的代码经验文章。本文描述python
语言环境中,单星号实现的参数解压功能。测试环境:win10
,python@3.11.0
。
前文回顾
关于python
里面的两个星号的问题,苏南大叔总结过两篇文章了。本文是第三篇关于单星号的用法的文章总结:
涉及到多个数据类型的总结:
单星号解压tuple
、list
普通的解压功能,参考范例:
tuple1 = ("苏","南")
tuple2 = ("大","叔")
tuple3 = tuple1 + tuple2 # ('苏', '南', '大', '叔')
tuple4 = (*tuple1, *tuple2) # ('苏', '南', '大', '叔')
tuple5 = tuple(zip(tuple1, tuple2)) # (('苏', '大'), ('南', '叔'))
tuple6 = (*tuple5[0], *tuple5[1]) # ('苏', '大', '南', '叔')
su, nan, *dashu = tuple3 # 苏 南 ('大', '叔')
print(tuple3,type(tuple3)) # ('苏', '南', '大', '叔') <class 'tuple'>
print(tuple4) # ('苏', '南', '大', '叔')
print(tuple5) # (('苏', '大'), ('南', '叔'))
print(tuple6) # ('苏', '大', '南', '叔')
print(su,nan,dashu,type(dashu)) # 苏 南 ('大', '叔') <class 'list'>
最后一条中,tuple
类型居然解压出了一个list
类型...
上述代码中的tuple
类型,直接修改为list
类型,依然成立。
list1 = ["苏","南"]
list2 = ["大","叔"]
list3 = list1 + list2 # ['苏', '南', '大', '叔']
list4 = [*list1, *list2] # ['苏', '南', '大', '叔']
list5 = list(zip(list1, list2)) # [('苏', '大'), ('南', '叔')]
list6 = [*list5[0], *list5[1]] # ['苏', '大', '南', '叔']
su, nan, *dashu = list3 # 苏 南 ['大', '叔'] <class 'list'>
print(list3,type(list3)) # ['苏', '南', '大', '叔'] <class 'list'>
print(list4) # ['苏', '南', '大', '叔']
print(list5) # [('苏', '大'), ('南', '叔')]
print(list6) # ['苏', '大', '南', '叔']
print(su,nan,dashu,type(dashu)) # 苏 南 ['大', '叔'] <class 'list'>
单星号传参解压tuple
、list
单星号的传参解压功能,参考范例:
tuple1 = ("苏", "南")
def test(tuple1, s, *s1):
print( (tuple1, ("大", "叔")) ) # (('苏', '南'), ('大', '叔'))
print( (*tuple1, *("大", "叔")) ) # ('苏', '南', '大', '叔')
print(sum(s)) # 6
print(sum(s1)) # 6
test(tuple1, (1, 2, 3), *(1, 2, 3))
换成list
类型,依然成立。
list1 = ["苏", "南"]
def test(list1, s, *s1):
print( (list1, ["大", "叔"]) ) # (('苏', '南'), ('大', '叔'))
print( (*list1, *["大", "叔"]) ) # ('苏', '南', '大', '叔')
print(sum(s)) # 6
print(sum(s1)) # 6
test(list1, [1, 2, 3], *[1, 2, 3])
另外一个可能的答案
整体上来说,目前来看,这个单星号在函数定义的时候,似乎没有啥意义。其正确的用法可能是这样的:
list1 = ["苏", "南"]
def test(list1, s, *s1):
print((list1, ["大", "叔"])) # (('苏', '南'), ('大', '叔'))
print((*list1, *["大", "叔"])) # ('苏', '南', '大', '叔')
print(sum(s)) # 6
print(sum(s1)) # 6
test(list1, [1, 2, 3], 1, 2, 3)
但是这种使用方式下,单星号可不是一个解压的功能了,它把剩余参数合并成了一个tuple
。
def who(su, nan, *dashu):
print(su) # 苏
print(nan) # 南
print(dashu,type(dashu)) # ('大', '叔') <class 'tuple'>
me = ['苏', '南', '大', '叔']
who(*me)
只能定义一个单星号
另外,根据python
函数定义的规则,加星号的参数有且只有一个。
def test3(*tuple1,*tuple2):
如果试图如上定义,会得到报错信息:
bashSyntaxError: * argument may appear only once
结束语
没有啥可说的,链接见下面:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。