當前位置:成語大全網 - 書法字典 - python中星號變量的幾種特殊用法介紹

python中星號變量的幾種特殊用法介紹

在Python中,除了乘法和冪運算,星號還有壹種特殊用法“在變量前面加壹個單星號或兩個星號”,實現多個參數的傳遞或變量的反匯編。本文將詳細介紹“星號參數”的用法。

壹、星號變量是什麽?最初,星號變量用於函數的參數傳遞。在下面的示例中,單星號表示接收任意數量的非關鍵字參數的位置,這些參數在函數的*b位置轉換為元組,而雙星號表示接收任意數量的關鍵字參數的位置,這些參數在**b位置轉換為字典:

#!/usr/bin/env python

#編碼=utf-8

# -

def one(a,*b):

" "" A是普通傳入參數,*b是非關鍵字星號參數" " "

打印(b)

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

# -

def二(a=1,**b):

" "" A是普通關鍵字參數,**b是關鍵字雙星號參數" " "

打印(b)

兩個(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會將這些傳入的參數轉換成壹個元組,並進行下面的調用。

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

#傳入壹個(a,*b)後,相當於

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

#在第二個函數中,**b的位置可以接收任意數量的關鍵字參數,進行如下調用。

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

#傳入壹個(a,*b)後,相當於

兩個(a=1,{'b': 2,' c': 3,' e': 5,' f': 6,' d': 4})

了解了單星號和雙星號的基本用法後,我們再來看看它們的引申用法。

二、單星號變量實例單星號變量不僅可以用在函數的參數傳遞中,實際上壹個普通變量也可以通過使用單星號前綴拆分成單個元素。請看下面的例子:

#!/usr/bin/env python

#編碼=utf-8

# -

定義壹個(*x):

" ""輸出傳入的第壹個參數" " "

打印(x[0])

# -

lst=["a "," b "," c "," d"]

stri="www.pythontab.com "

壹(stri,lst)

壹個(*lst)

壹個(*stri)#程序輸出

www.pythontab.com

a

W#第壹次調用one(stri,lst),代入one(*x)後,相當於。

壹個((["a "," b "," c "," d"]," www.pythontab.com)))

#第二次調用one(*lst),代入one(*x)等價於。

壹(“a”、“b”、“c”、“d”))

#第三次調用one(*stri),代入one(*x)等價於。

壹((“w”、“w”、“w”、“w”、“w”等)。、“q”、“I”、“n”、“g”、“s”、“w”、“o”、“r”、“d”、“g”等。”、“c”、“o”、“m”))

#如果變量前面用了單個星號,實際上是對變量的反匯編操作。變量中的單個元素被分解,然後依次傳遞給one()函數。在傳入one()函數後,one()函數會將這些傳入的單個元素保存為壹個tuple,這就是為什麽我們可以提取print(x[0])中的第壹個元素。

為了驗證這壹點,我們將one()函數修改如下:

#!/usr/bin/env python

#編碼=utf-8

# -

定義壹個(*x):

" ""錯誤實例,試圖修改傳入的第壹個參數值,引發異常" " "

打印(x[0])

x[0]="pythontab "

lst=["a "," b "," c "," d"]

壹(*lst)#我們知道列表是可以改變的。我們拆分列表並將其傳遞給one()函數,嘗試更改函數內部第壹個元素的值。結果,我們觸發了壹個“TypeError”異常。妳可以自己試試。產生這種結果的原因已經在上面解釋過了。不管傳入參數的原始類型是什麽,one(*x)在*x位置接收到這些傳入參數後,

讓我們再看幾個例子:

#!/usr/bin/env python

#編碼=utf-8

# -

定義壹個(*x):

" ""打印出傳入的參數" " "

對於x中的a:

打印(壹份)

lst=["abc ",123," www.pythontab.com"]

stri="abcd "

dect={1:"壹",2:"二",3:"三" }

壹個(*lst)

壹個(*stri)

壹個(*dect)#程序輸出

字母表

123

www.pythontab.com

a

b

c

d

1

2

3#的前兩個調用很好理解。最後,我們傳入了壹個dictionary元素,發現只輸出了dictionary元素的鍵,但不包含值。事實上,單個星號無法讀取字典中的值,只會讀取字典中的鍵。如果要讀取字典中的值,需要使用雙星號。

三、雙星號變量示例在第2節的最後,我們拆分了壹個只有壹個星號的字典,並將其傳遞給函數,但只獲得了字典的鍵。下面演示了如何使用雙星號來獲取字典的值:

#!/usr/bin/env python

#編碼=utf-8

# -

定義壹個(**x):

" ""將傳入的關鍵字參數值保存為輸出元組" " "

打印(x)

b=()

對於x.keys()中的:

b+=(x[a],)

打印(b)

dect={ "壹":1,"二":2,"三":3}

壹個(**dect)#程序輸出

{ '三':3,'壹':1,'二':2}

(3,1,2)#對字典使用雙星前綴相當於將其拆分為關鍵字參數,**dect相當於將字典拆分為以下內容。

壹=1,二=2,三=3

#把這些關鍵字參數傳成壹個(**x),相當於(還記得我前面說的,雙星把它收到的所有關鍵字參數都存成字典了)。

壹個({ "壹":1,"二":2,"三":3})

#既然是字典,字典裏的所有方法都可以用。用壹個for循環遍歷字典的鍵,然後用壹個tuple把這些鍵對應的值相加,最後打印出這個tuple。

Ps:註意,使用該方法將字典傳入函數時,字典的鍵的命名要符合python變量的命名規則。通過上面的分析,不難看出,雙星號首先會將字典轉換成關鍵字參數的形式,相當於將字典中的關鍵字作為變量名。如果鍵不符合變量的命名規則,將拋出“TypeError”異常。妳可以試著把上面字典裏的鍵和值反過來,用數字當鍵,看看會發生什麽。

當“非關鍵字參數(位置參數)”和“關鍵字參數”同時出現在函數的接收參數中時,可以使用單個星號來分隔這兩個參數,例如:

#!/usr/bin/env python

#編碼=utf-8

# -

定義混合(a,b,*,x,y):

" ""位置參數與關鍵字參數混合" " "

返回a,b,x,y

星號前面的# A和B是位置參數,星號後面的X和Y是關鍵字參數。調用mix()函數傳入參數時,關鍵字參數必須以“變量名=值”的形式傳入數據。如果數據作為位置參數傳入,將引發TypeError異常。

Print(mix(1,2,x=3,y=4))#程序輸出

(1,2,3,4)#在上面的mix函數中,如果position參數和keyword參數之間已經有壹個單獨的星號position參數,那麽這個參數後面的所有參數都是keyword參數,不需要用星號來分隔。舉個例子,

#!/usr/bin/env python

#編碼=utf-8

# -

定義混合(a,b,*c,x,y):

" ""位置參數與關鍵字參數混合" " "

返回a,b,c,x,y

#您可以在* c的位置輸入任意數量的位置參數值

Print (mix (1,2,3,4,5,x = 6,y = 7)) #程序輸出

(1,2,(3,4,5),6,7)如果我們要在壹個函數中包含各種參數的組合,就必須遵循這個順序:位置參數(必選參數)、默認參數、單星參數或星號分隔符、關鍵字參數、雙星參數;

請看下面的例子:

#!/usr/bin/env python

#編碼=utf-8

# -

定義混合(a,b=0,*c,x,**y):

" ""位置參數與關鍵字參數混合" " "

返回a,b,c,x,y

Print (mix (1,2,3,4,5,x = 6,y = 7,z = 8)) #程序輸出

(1,2,(3,4,5),6,{'y': 7,' z': 8})