記python中函數(shù)調(diào)用方不按順序提供部分默認(rèn)參數(shù)的功能以及和php的不同

今天看到python的函數(shù)部分,發(fā)現(xiàn)python的函數(shù)有一個(gè)很實(shí)用的特性:支持函數(shù)調(diào)用方不按順序提供部分默認(rèn)參數(shù)
一般的帶可選參數(shù)的函數(shù)和調(diào)用如下:

def power(x, n=2):
    if not isinstance(x, (int, float)):
        raise TypeError('input param type error, must be a int or float')
    res = 1
    while n > 0:
        res = res * x
        n -= 1
    return res
print(power(3,2)) 
print(power(5)) #第二個(gè)可選參數(shù)可以不帶

但是如果有多個(gè)可選參數(shù),且函數(shù)調(diào)用方不想按順序提供可選參數(shù)的值,或者不按順序只提供部分可選參數(shù)的值,怎么辦?

def stuinfo(name, gender, age=6, city='Beijing'):
    print('name:', name)
    print('gender:', gender)
    print('age:', age)
    print('city:', city)

stuinfo('minp', 'male', city='shanghai')

stuinfo函數(shù)有兩個(gè)可選參數(shù),順序依次是age、city,當(dāng)調(diào)用方不想提供age,只想傳city過來時(shí),python能做到嗎?答案是肯定的,我們允許如上demo得到結(jié)果:

E:\python_study>python 1.py
('name:', 'minp')
('gender:', 'male')
('age:', 6)
('city:', 'shanghai')

感覺python確實(shí)很靈活很方便,萬能的php都做不到這一點(diǎn):

<?php
function getnums($a, $b=1,$c=4){
    return $a + $b + $c;
}
$res = getnums(1, $c=2);
var_dump($res);

運(yùn)行結(jié)果為:

D:\Program Files (x86)\360\skylar6\php>php 1.php
int(7) #注意結(jié)果不是我們期待的4,說明php不支持函數(shù)調(diào)用方不按順序提供部分默認(rèn)參數(shù)的做法。

說明:當(dāng)我想提供部分默認(rèn)參數(shù)的值,且不是按順序提供的話,php是不支持的。
上面例子中,getnums函數(shù)的兩個(gè)默認(rèn)參數(shù)的順序是$b, $c,但是如果函數(shù)調(diào)用方不想提供$b, 而只想提供$c的時(shí)候,php解析器依然把提供的參數(shù)$c=4賦值給了排在前面的默認(rèn)參數(shù)$b,導(dǎo)致了錯(cuò)誤結(jié)果7而不是4.

結(jié)論:python支持這種函數(shù)調(diào)用方不按順序提供部分可選參數(shù)的做法,php不支持這一點(diǎn)。

參考:
函數(shù)的參數(shù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容