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

2021-10-06 08:29:41 字數 2511 閱讀 2631

python和c++不同,並沒有指標,因此python中的*號作用和c++中不同。網上對於這方面的教程寫的囉囉嗦嗦,一點不簡明扼要。看的讓人找不到重點。我這裡快速的講解一下。

a=1

b=2c=a*b

輸出c當然是1×2=2。相信這並非是大家關心的重點。

這樣無需確保值與變數的個數相同。舉例來說:

a,b,*c=[1,2,3,4]
c前面的*號主要是為了收集引數。這樣輸出a,是1;輸出b,是2,輸出c,是[3,4]。注意這裡收集的是列表。

具體用途,是看用*號的場合是在函式定義時還是函式呼叫時。(這句話至關重要!)

3.1 如果在定義函式時,*代表收集引數,**代表收集關鍵字引數。

3.1.1定義函式時,乙個*的情況:

def myprint(*params):

print(params)

這時候如果以如下方式呼叫myprint

>>> myprint(1,2,3)
則會輸出:

(1,2,3)
因此作用是將呼叫時提供的所有值,放在乙個元組裡。

跟上面2裡的有所區別,2裡是收集列表中多餘的引數,而這裡是收集好引數,一起放進元組裡面。

這種情況下,在函式定義時的形參裡的*params後面,就最好不要再加入別的形參了,比如你定義成 def myprint(*params,x) ,呼叫的時候myprint(1,2,3),就會報錯。因為這樣python分不清哪個資料是給params的。如果你非要這麼定義也行,不過在呼叫的時候,必須顯示的指出哪個值是給x的。比如myprint(1,2,x=3),通過這種方式呼叫才不會出錯。

3.1.2 定義函式時,兩個**的情況:

對於之前引數是*params的情況,myprint並不能傳入關鍵字引數。啥意思呢,就是仍然採取這種方式定義時:

def myprint1(*params):

print(params)

這樣是錯誤的:

>>> myprint1(x=1,y=2,z=3)  #會報錯
因為*號並不會收集關鍵字引數。所以需要如下方式修改,採用兩個星號:

def myprint2(**params):

print(params)

這樣呼叫myprint2就不會有問題:

>>> myprint2(x=1,y=2,z=3)
會輸出如下結果:

得到乙個字典。字典中元素的先後順序取決於你的環境。

3.2 如果在呼叫函式時,*和**都是分配引數用的

3.2.1 呼叫函式時,乙個*的情況:

例如,還是剛剛那個print函式

def myprint(x,y):

print(x)

print(y)

這下形參有兩個了,但是我能不能只傳入乙個形參?

對,「呼叫函式時分配引數」「定義函式時收集引數」反過來了!

假設你還有乙個元組:

params=(1,2)
可以通過如下方式呼叫myprint函式:

>>> myprint(*params)
就可以輸出:

1

2

3.2.2 呼叫函式時,兩個**的情況:

和上面3.1.2很像,是分配字典的。

這回params是乙個字典了:

params=
可以通過如下方式呼叫myprint函式:

>>> myprint(**params)
就可以輸出:

1

2

3.3 如果在定義和呼叫函式時,都使用*號呢?

這樣將值傳遞元組或字典,沒有實際意義,不發揮收集引數或者分配引數的意義,不如不用。

例項:

資料庫查詢過濾字段:

session.query(myclass).filter_by(id="111", info="test")

如果想把字段以引數傳遞進來 

web_dict=

session.query(myclass).filter_by(**web_dict)

這樣就可以了

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

原帖位址見 python 12 星號變數的特殊用法 在python中,星號除了用於乘法數值運算和冪運算外,還有一種特殊的用法 在變數前新增單個星號或兩個星號 實現多引數的傳入或變數的拆解,本文將詳細介紹 星號引數 的用法。最初,星號變數是用在函式的引數傳遞上的,在下面的例項中,單個星號代表這個位置接...

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...