python 星號(*)的多種用途
阿新 • • 發佈:2020-09-22
結論
概括的來說,就是對修飾的變數進行拆分,對修飾的形式引數進行引數聚集。
單*號,將被修飾的變數按元素方式拆分,對修飾的形式引數進行引數聚集。
雙**號,將被修飾的變數按鍵值對進行拆分,對修飾的形式引數進行引數聚集。
修飾例項變數時
- 作用: 講被修飾的例項變數或者可迭代物件進行拆分
def func3(a,b,c): print("param a is {},param b is {},param c is {}".format(a,c)) if __name__ == '__main__': arr1 = [1,2,3] print(arr1,sep='\t') # [1,3]\t 正常輸出 print(*arr1,sep='\t') # 1\t2\t3 每個數字中間以\t分割 arr2 = [[1,3],[3,4,5],[5,6,7]] print(list(zip(*arr2))) # [(1,3,5),(2,6),(3,5,7)] 二維陣列的行轉列 dictionary = {'a': 1,'b': 2,'c': 3} print(dictionary,sep='\t') # {'a': 1,'c': 3}\t 正常輸出 print(*dictionary,sep='\t') # a\tb\tc\t 每個字母中間以\t分割 print(func3(**dictionary)) # param a is 1,param b is 2,param c is 3
比較使用和不使用*號後產生的結果就可以發現,單*號將可迭代物件進行了拆分,按單個元素方式依次將資料傳進方法。
配合其他方法使用可以優雅的完成矩陣的行轉列操作。
雙**號的使用,是將變數物件拆分成鍵值對的形式,所以只有dict型別可以使用。
注意上面的func3,他需要三個形參,但是我們只傳入**dict_obj,就完成了功能。
可迭代物件有:list,dict,tuple,generator,iterator
出現在方法的形式引數位置
- 作用: 放在引數列表的末尾, 作為不定長的引數列表的形參接受物件。 (可以類比Java的可變引數列表)
def func1(*args): print("type",type(args)) # type <class 'tuple'> print("all arguments: ",args) # all arguments: (1,3) print("second argument: ",args[1]) # second argument: 2 def func2(**kw): print("type",type(kw)) # type <class 'dict'> print("all arguments: ",kw) # all arguments: {'a': 1,'c': 3} print("second argument: ",kw['a']) # second argument: 1 if __name__ == '__main__': a,c = 1,3 func1(a,c) func2(a=a,b=b,c=c)
儘管函式func1的形參只有一個,但被傳遞三個引數,程式還是可以正常執行。
因為*args將三個引數以tuple形式儲存,作為一個整體傳遞給方法func1。
同理,func2的**kw形參將傳入的三個引數壓成一個dict進行使用。
具體實驗程式碼可以通過Github獲得。
以上就是python 星號(*)的多種用途的詳細內容,更多關於python 星號(*)的資料請關注我們其它相關文章!