1. 程式人生 > 程式設計 >python 星號(*)的多種用途

python 星號(*)的多種用途

結論

概括的來說,就是對修飾的變數進行拆分,對修飾的形式引數進行引數聚集。
單*號,將被修飾的變數按元素方式拆分,對修飾的形式引數進行引數聚集。
雙**號,將被修飾的變數按鍵值對進行拆分,對修飾的形式引數進行引數聚集。

修飾例項變數時

  • 作用: 講被修飾的例項變數或者可迭代物件進行拆分
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 星號(*)的資料請關注我們其它相關文章!