python 星号(*)的多种用途
结论
概括的来说,就是对修饰的变量进行拆分,对修饰的形式参数进行参数聚集。
单*号,将被修饰的变量按元素方式拆分,对修饰的形式参数进行参数聚集。
双**号,将被修饰的变量按键值对进行拆分,对修饰的形式参数进行参数聚集。
修饰实例变量时
- 作用:讲被修饰的实例变量或者可迭代对象进行拆分
deffunc3(a,b,c): print("paramais{},parambis{},paramcis{}".format(a,b,c)) if__name__=='__main__': arr1=[1,2,3] print(arr1,sep='\t')#[1,2,3]\t正常输出 print(*arr1,sep='\t')#1\t2\t3每个数字中间以\t分割 arr2=[[1,2,3],[3,4,5],[5,6,7]] print(list(zip(*arr2)))#[(1,3,5),(2,4,6),(3,5,7)]二维数组的行转列 dictionary={'a':1,'b':2,'c':3} print(dictionary,sep='\t')#{'a':1,'b':2,'c':3}\t正常输出 print(*dictionary,sep='\t')#a\tb\tc\t每个字母中间以\t分割 print(func3(**dictionary))#paramais1,parambis2,paramcis3
比较使用和不使用*号后产生的结果就可以发现,单*号将可迭代对象进行了拆分,按单个元素方式依次将数据传进方法。
配合其他方法使用可以优雅的完成矩阵的行转列操作。
双**号的使用,是将变量对象拆分成键值对的形式,所以只有dict类型可以使用。
注意上面的func3,他需要三个形参,但是我们只传入**dict_obj,就完成了功能。
可迭代对象有:list,dict,tuple,generator,iterator
出现在方法的形式参数位置
- 作用:放在参数列表的末尾,作为不定长的参数列表的形参接受对象。(可以类比Java的可变参数列表)
deffunc1(*args): print("type",type(args))#typeprint("allarguments:",args)#allarguments:(1,2,3) print("secondargument:",args[1])#secondargument:2 deffunc2(**kw): print("type",type(kw))#type print("allarguments:",kw)#allarguments:{'a':1,'b':2,'c':3} print("secondargument:",kw['a'])#secondargument:1 if__name__=='__main__': a,b,c=1,2,3 func1(a,b,c) func2(a=a,b=b,c=c)
尽管函数func1的形参只有一个,但被传递三个参数,程序还是可以正常运行。
因为*args将三个参数以tuple形式存储,作为一个整体传递给方法func1。
同理,func2的**kw形参将传入的三个参数压成一个dict进行使用。
具体实验代码可以通过Github获得。
以上就是python星号(*)的多种用途的详细内容,更多关于python星号(*)的资料请关注毛票票其它相关文章!