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

2022-07-28 17:45:30 字數 2403 閱讀 6572

原帖位址見:[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的位置可以傳入任意多沒有關鍵字的引數,*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,)

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

單星號變數不僅僅能夠用在函式的引數傳遞中,實際上對乙個普通變數使用單星號字首,能夠將這個變數拆分成單個元素。

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

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

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

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

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

需要注意的是:

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

python 中的 (星號)和 雙星號)簡介

python和c 不同,並沒有指標,因此python中的 號作用和c 中不同。網上對於這方面的教程寫的囉囉嗦嗦,一點不簡明扼要。看的讓人找不到重點。我這裡快速的講解一下。a 1 b 2c a b輸出c當然是1 2 2。相信這並非是大家關心的重點。這樣無需確保值與變數的個數相同。舉例來說 a,b,c ...

python 中帶星號和雙星好的引數

當要使函式接收元組或字典形式的引數的時候,有一種特殊的方法,它分別使用 和 字首。這種方法在函式需要獲取可變數量的引數的時候特別有用。def powersum power,args return the sum of each argument raised to specified power.t...

Python中星號 的用法

1 表示乘號 2 表示倍數,例如 def t msg,time 1 print msg time t hi 3 列印結果 列印3次 hi hi hi3 單個 星號 1 如 parameter是用來接受任意多個引數並將其放在乙個元組中。def demo p print p demo 1,2,3 1,2...