程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

戲說python * 與 **

編輯:Python

python與c++不同,並沒有指針

1.是一個乘法運算符號

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

2.收集列表中多余的值

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

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

3.涉及到函數了,*號的作用在於收集參數或者分配參數。

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

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

3.1.1定義函數時,一個*的情況:

這時候如果以如下方式調用myprint

因此作用是將調用時提供的所有值,放在一個元組裡。

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

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

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

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

這樣是錯誤的:

因為*號並不會收集關鍵字參數。所以需要如下方式修改,采用兩個星號:

這樣調用myprint2就不會有問題:

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

3.2 如果在調用函數時,*和**都是分配參數用的

3.2.1 調用函數時,一個*的情況:

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

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

對,“調用函數時分配參數”跟“定義函數時收集參數”,反過來了!

假設你還有一個元組:

params=(1,2)
可以通過如下方式調用myprint函數:

myprint(*params)
就可以輸出:

3.2.2 調用函數時,兩個**的情況:

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

這回params是一個字典了:

params={‘x’:1,‘y’:2}
可以通過如下方式調用myprint函數:

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


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved