位置引數是最簡單的傳入引數的方式
def
func
(a,b)
:print
(a+b)
func(1,
3)#3
預設引數是在呼叫函式的時候使用一些包含預設值的引數
def
power
(x,n=2)
: s =
1while
(n>0)
n -=
1 s *= n
return s
可變引數允許在呼叫引數的時候傳入多個引數,這些引數在呼叫時被自動組裝為乙個tuple
def
calc
(*nums)
:sum=0
for n in nums:
sum+= n
return
sum
此時有兩種呼叫方式:
calc(1,
2,3)
# return 6
calc(*[
1,2,
3])# return 6
其中第一種方法等價於:
>>
>ls=[1
,2,3
]>>
>calc(ls[0]
,ls[1]
,ls[2]
)
在第二種方法中,*nums
表示把這個list中的所有元素作為可變引數傳進函式。
可變引數允許傳入0個~多個引數,而關鍵字引數允許在呼叫時以字典形式傳入多個引數,在傳遞引數時,需要使用=
連線鍵和值
#使用兩個*表示關鍵字引數
defperson_info
(name,age,
**kw)
:print
("name"
,name,
"age"
,age,
"other"
,kw)
>>
>person(
"huang",35
,city =
'karlsruhe'
)>>
>name huang age 35 other
>>
>extra =
>>
>person(
'huang',24
,**extra)
**extra
表示把extra
這個dict
的所有key-value
用關鍵字引數傳入到函式的**kw
引數。
命名關鍵字在關鍵字的基礎上限制了傳入關鍵字的變數名。
和普通關鍵字引數不同,命名關鍵字引數需要乙個用來區分的分隔符*
,他後面的引數被認為是命名關鍵字引數。
def
person_info
(name,age,
*,city,job)
:print
(name,age,city,job)
>>
>person_info(
"huang",24
,city =
"karlsruhe"
,job =
"student"
)
有以下注意事項:
上述五種不同型別的引數傳遞方式,除了可變引數和命名關鍵字引數不能混合使用,其餘均可組合使用。但需要注意的是,引數定義的順序必須是:位置引數-預設引數-可變引數-關鍵字引數-命名關鍵字引數。
由於python的函式的靈活性,上述的物種傳參形式可以歸結為通過類似於func(*args,**kw)
的形式呼叫。其中,*args
對用的是可變引數,接收的是乙個tuple
。**kw
對應的是關鍵字引數,接收到的是乙個dict
。
def
f1(a,b,c=0,
*args,
**kw)
:print
("a="
,a,"b="
,b,"c="
,c,"args="
,args,
"kw="
,kw)
>>
>args =(1
,2,3
,4)>>
>kw =
>>
>f1(
*args,
**kw)
return
:>>
>a=
1 b=
2 c=
3 args=(4
,) kw=
引數的傳遞時通過自動將物件賦值給本地變數名來實現的改變函式的可變引數的值也許會對呼叫者有影響[1]
[2]
python 函式 引數傳入分類
1.位置引數 呼叫函式時傳入實際引數的數量和位置都必須和定義函式時保持一致。2.關鍵字引數 好處 不用記住形參位置。所謂關鍵字就是 鍵 值 繫結,呼叫函式時,進行傳遞。特點 位置引數和關鍵字引數混合傳參時,位置引數必須在關鍵字引數的前面,關鍵字引數之間不存在先後順序。3.預設引數 好處 呼叫函式時可...
jpython 傳入引數 python函式傳值
python函式傳值到底傳什麼?有很多文章講過這個,但是前兩天被問到居然還是有點不清楚,有點蒙,今天就具體好好看看這個。def test a a 10 print a 這個函式接受乙個輸入,假設輸入20,那麼輸出10,python在傳遞引數的將20的引用傳入,然後函式體內重新賦值,新建了乙個物件10...
php 物件方式傳入引數
類是單例模式,物件方式傳入引數,如果引數過多是,使用形參容易混亂 class objectpdo 私有化轉殖方法 private function clone 公共化獲取例項方法 public static function getinstance return self instance 使用 t...