1. 程式人生 > >python中 單星號(*)與雙星號(**)的使用

python中 單星號(*)與雙星號(**)的使用

variable 變量命名規則 odin 不能 tool 除了 peer 雙星 pri

原帖地址見:[Python]-12-星號變量的特殊用法

在Python中,星號除了用於乘法數值運算和冪運算外,還有一種特殊的用法"在變量前添加單個星號或兩個星號",實現多參數的傳入或變量的拆解,本文將詳細介紹"星號參數"的用法。

# 什麽是星號變量(*)

最初,星號變量是用在函數的參數傳遞上的,在下面的實例中,單個星號代表這個位置接收任意多個非關鍵字參數,在函數的*b位置上將其轉化成元組,而雙星號代表這個位置接收任意多個關鍵字參數,在**b位置上將其轉化成字典

*   該位置接受任意多個非關鍵字(non-keyword)參數,在函數中將其轉化為元組(1,2,3,4)

**  該位置接受任意多個關鍵字(keyword)參數,在函數**位置上轉化為詞典 [

key:value, key:value ]

例子:

技術分享圖片
#!/usr/bin/env python
#coding=utf-8
#--------
def one(a,*b):
    """a是一個普通傳入參數,*b是一個非關鍵字星號參數"""
    print(b)
one(1,2,3,4,5,6)
#--------
def two(a=1,**b):
    """a是一個普通關鍵字參數,**b是一個關鍵字雙星號參數"""
    print(b)
two(a=1,b=2,c=3,d=4,e=5,f=6)
技術分享圖片

輸出為:

第一個輸出為:
(2, 3, 4, 5, 6)
第二個輸出為: {‘b‘: 2, ‘c‘: 3, ‘e‘: 5, ‘f‘: 6, ‘d‘: 4}

從輸出中可以看到,第一個函數中,*b的位置可以傳入任意多沒有關鍵字的參數,*b會將這些傳入參數轉化成一個元組,下面的調用

其中,第一個的輸入可以理解為:

one(1,2,3,4,5,6)

傳入後,等價於:

one(1,(2,3,4,5,6))

#第二個函數中,**b的位置可以接收任意多個關鍵字參數,下面的調用

two(a=1,b=2,c=3,d=4,e=5,f=6)

傳入到 one(a,*b)中,等價於:

two(a=1,{‘b‘: 2, ‘c‘: 3, ‘e‘: 5, ‘f‘: 6, ‘d‘: 4})

# 單星號變量實例(*)

單星號(*)的其它作用:

單星號變量不僅僅能夠用在函數的參數傳遞中,實際上對一個普通變量使用單星號前綴,能夠將這個變量拆分成單個元素。

#如果在變量前面使用單星號,實際上是對變量的一次拆解操作,將變量中單獨的元素拆解出來,然後依次傳入one()函數

而傳入one()函數後,one()函數會將這些傳入的單個元素保存成一個元組,這就是為什麽我們 print(x[0])能夠提取第一個元素的原因

變量在傳入到單星號變量函數中時,會將變量自動轉化為元組,而元組是不能改變的。

另外,單星號是無法讀取到字典中的值的,永遠只會讀取到字典中的鍵(key),如果想讀取到字典中的值,需要使用雙星號(**)

# 雙星號(**)變量實例

雙星號可以用來獲得字典的值

需要註意的是:

使用這種方法將字典傳入函數的時候,字典的鍵的命名要符合python變量的命名規則,通過上面的分析也不難看出,雙星號會將字典首先轉換成關鍵字參數的形式,就相當於使用字典中的鍵作為變量名,如果鍵不符合變量命名規則,則會拋出一個"TypeError"異常。

更多詳細用法請見:

[Python]-12-星號變量的特殊用法

python中 單星號(*)與雙星號(**)的使用