成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

python基礎(chǔ)知識(shí)之函數(shù)初階——參數(shù)詳解

Rindia / 1995人閱讀

摘要:定義函數(shù)中的函數(shù)使用關(guān)鍵字定義,格式為函數(shù)名形參函數(shù)語(yǔ)句塊函數(shù)名只能包含字符串下劃線和數(shù)字且不能以數(shù)字開頭。所以默認(rèn)參數(shù)還是放在后面合適。

定義函數(shù)

python中的函數(shù)使用關(guān)鍵字 def 定義,格式為:

def 函數(shù)名(形參):
    函數(shù)語(yǔ)句塊

函數(shù)名只能包含字符串、下劃線和數(shù)字且不能以數(shù)字開頭。
函數(shù)的形參分為:位置參數(shù)、默認(rèn)參數(shù)(自帶默認(rèn)值的參數(shù))、動(dòng)態(tài)參數(shù)
return是關(guān)鍵字,作用是返回函數(shù)的結(jié)果,遇到return時(shí)函數(shù)立刻結(jié)束,不再執(zhí)行其他語(yǔ)句

位置參數(shù)
def func(a,b):
    return a,b 
print(func(1,2)) #按照位置傳入?yún)?shù),1賦值給a,2賦值給b
print(func(a=2,b=3))#按照關(guān)鍵字傳入?yún)?shù),指定a、b的值
print(func(3,b=6))#混合傳入,此時(shí)注意,位置參數(shù)要在前面
#如果不指定實(shí)參會(huì)報(bào)錯(cuò),因?yàn)楹瘮?shù)中由位置參數(shù),則調(diào)用函數(shù)時(shí)必須傳入?yún)?shù)
#print(func())

輸出結(jié)果為:

    (1, 2)
    (2, 3)
    (3, 6)

不寫return或者只寫return,后面不寫其他內(nèi)容時(shí),函數(shù)會(huì)返回None
return可以返回任意數(shù)據(jù)類型的值。當(dāng)return返回多個(gè)值時(shí),會(huì)被組織成元組,也就是說返回多個(gè)值時(shí),類型為元組??梢杂枚鄠€(gè)變量接收結(jié)果,但變量的數(shù)量要與返回的值數(shù)量相同,示例如下:

def func():
    return 1,"asd",(1,"a",["hello","world"]),[1,2,3]
print("直接打印結(jié)果:",func())
a,b,c,d = func() 
print("a:",a)
print("b:",b)
print("c:",c)
print("d:",d)

輸出:

直接打印結(jié)果: (1, "asd", (1, "a", ["hello", "world"]), [1, 2, 3])
a: 1
b: asd
c: (1, "a", ["hello", "world"])
d: [1, 2, 3]
默認(rèn)參數(shù)
def func(name,age=20):
    print("{}已經(jīng){}歲啦".format(name,age))
func("劉小姐")#默認(rèn)參數(shù)可以不傳,這時(shí)age值為默認(rèn)的20
func("劉小姐",28)#默認(rèn)參數(shù)傳值時(shí)則覆蓋默認(rèn)值
劉小姐已經(jīng)20歲啦
劉小姐已經(jīng)28歲啦

默認(rèn)值只被賦值一次。這使得當(dāng)默認(rèn)值是可變對(duì)象時(shí)會(huì)有所不同,比如列表、字典或者大多數(shù)類的實(shí)例。例如,下面的函數(shù)在后續(xù)調(diào)用過程中會(huì)累積(前面)傳給它的參數(shù):

def func(a = []):
    a.append("x")
    return a
for i in range(6):
    print(func())

每次循環(huán)調(diào)用的時(shí)候,雖然沒有給a傳入?yún)?shù),但是a并不會(huì)被賦值空列表[],原因是默認(rèn)值只會(huì)被賦值一次,所以輸出結(jié)果變成了下面的樣子:

    ["x"]
    ["x", "x"]
    ["x", "x", "x"]
    ["x", "x", "x", "x"]
    ["x", "x", "x", "x", "x"]
    ["x", "x", "x", "x", "x", "x"]

如果你不想讓默認(rèn)值在后續(xù)調(diào)用中累積,你可以像下面一樣定義函數(shù):

def func(a = None):
    if a is None: #如果a是None
        a = []
    a.append("x")
    return a
for i in range(6):
    print(func())
["x"]
["x"]
["x"]
["x"]
["x"]
["x"]

動(dòng)態(tài)參數(shù)

動(dòng)態(tài)參數(shù)分為兩種:
一種是用*args表示,它會(huì)把多余的位置參數(shù)統(tǒng)一接收,保存成一個(gè)元組的形式
另一種是用**kwargs表示,他會(huì)把多余的關(guān)鍵字參數(shù)統(tǒng)一接收,保存成一個(gè)字典的形式
先看一個(gè)*args的例子

def func(a,b,c,*args):
    print("*args內(nèi)容為:",args)
    sum1 = 0
    for i in args:
        sum1 += i
    sum1 = sum1 + a +b +c
    return sum1
print(func(1,2,3,4,5,6,7,8,9,10))

雖然形參只有4個(gè),但是我們傳入了10個(gè),4—10 都被*args接收形成元組

    *args內(nèi)容為: (4, 5, 6, 7, 8, 9, 10)
    55

再來看看**kwargs

def func(a,b,*args,c=20,**kwargs):
    print("*args內(nèi)容為:",args)
    print(c)
    print("**kwargs內(nèi)容為:",kwargs)
    sum1 = 0
    for i in args:
        sum1 += i
    sum1 = sum1 + a +b +c
    for k in kwargs:
        sum1 += kwargs[k]
    return sum1
print(func(1,2,3,4,5,6,7,8,9,10,c=22,x=11,y=33,z=66))
*args內(nèi)容為: (3, 4, 5, 6, 7, 8, 9, 10)
22
**kwargs內(nèi)容為: {"x": 11, "y": 33, "z": 66}
187

從上例可以看出如果各種類型的形參都出現(xiàn)時(shí),它們的順序應(yīng)該是:位置參數(shù)、動(dòng)態(tài)參數(shù)args、默認(rèn)參數(shù)、動(dòng)態(tài)參數(shù)*keargs

因?yàn)榧僭O(shè)默認(rèn)參數(shù)在 args之前,也就是func(a,b,c=20,args,*kwargs),那么傳入?yún)?shù)時(shí),形參c的值先會(huì)被實(shí)參3賦值(因?yàn)?的位置恰好對(duì)應(yīng)c,默認(rèn)參數(shù)不賦值時(shí)值為默認(rèn),賦值時(shí)則覆蓋默認(rèn)值),此時(shí)c=3,但是后面又出現(xiàn)了c=20,這時(shí)就會(huì)報(bào)錯(cuò),因?yàn)樾螀被重復(fù)賦值了兩次,這是不允許的 所以默認(rèn)參數(shù)排在 args后面

默認(rèn)參數(shù)必須排在kwargs前面,因?yàn)槿绻旁诤竺?,則c=22會(huì)被kwargs直接接收,這樣默認(rèn)參數(shù)毫無(wú)意義,這是不被允許的,會(huì)報(bào)錯(cuò)

下面是默認(rèn)參數(shù)排在*args前面的另一種方式,這種方式雖然也得出了相同的結(jié)果但是在調(diào)用時(shí)要特別的小心c的值所在的位置,
而且這種方式會(huì)造成默認(rèn)參數(shù)變得毫無(wú)意義,因?yàn)槭冀K用不到默認(rèn)值20。
所以默認(rèn)參數(shù)還是放在*args后面合適。

def func(a,b,c=20,*args,**kwargs):
    print("*args內(nèi)容為:",args)
    print(c)
    print("**kwargs內(nèi)容為:",kwargs)
    sum1 = 0
    for i in args:
        sum1 += i
    sum1 = sum1 + a +b +c
    for k in kwargs:
        sum1 += kwargs[k]
    return sum1
print(func(1,2,22,3,4,5,6,7,8,9,10,x=11,y=33,z=66))
*args內(nèi)容為: (3, 4, 5, 6, 7, 8, 9, 10)
22
**kwargs內(nèi)容為: {"x": 11, "y": 33, "z": 66}
187

動(dòng)態(tài)參數(shù)的一種快捷傳參方式

對(duì)于*args,可以在傳入?yún)?shù)時(shí)在lis前面加*號(hào) 直接傳入內(nèi)容

def func(*args):
    return args
lis = [1,2,{3,4,5},6,7,[8,9,0,1,23],34,5,(56,67),78,23]
print(type(lis))
print(func(*lis))

(1, 2, {3, 4, 5}, 6, 7, [8, 9, 0, 1, 23], 34, 5, (56, 67), 78, 23)

對(duì)于**kwargs可以在傳入?yún)?shù)時(shí)在dic前面加**號(hào) 直接傳入內(nèi)容

def func(**kwargs):
    return kwargs
dic = {"name":"超人","age":"500","job":"裝逼"}
print(func(**dic))
{"name": "超人", "age": "500", "job": "裝逼"}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/42551.html

相關(guān)文章

  • python基礎(chǔ)知識(shí)函數(shù)初階——閉包

    摘要:我們說觸發(fā)了閉包的函數(shù)叫做閉包函數(shù)閉包最大的特點(diǎn)就是它可以被外層函數(shù)返回后賦值給一個(gè)變量,并且攜帶了外層函數(shù)內(nèi)定義的變量例子如下變量為函數(shù)開辟的局部命名空間內(nèi)定義的變量函數(shù)內(nèi)引用了變量的內(nèi)層函數(shù)名被當(dāng)作返回值,此時(shí)閉包規(guī)則達(dá)成。 什么是閉包? 其實(shí)我們?cè)谑褂煤瘮?shù)過程中不經(jīng)意間就會(huì)觸發(fā)閉包,因?yàn)榭倳?huì)出于某種原因會(huì)在函數(shù)內(nèi)引用或修改上一層函數(shù)的變量,這時(shí)就會(huì)觸發(fā)閉包 那么什么是閉包?其實(shí)就...

    TIGERB 評(píng)論0 收藏0
  • python基礎(chǔ)知識(shí)函數(shù)初階——命名空間

    摘要:在內(nèi)置命名空間不能使用全局和局部的名字。可以形象地理解成內(nèi)置命名空間具有最高級(jí)別,不需要定義就可以使用,全局命名空間次之,最低級(jí)是局部命名空間。 python中的命名空間分三種: 內(nèi)置的命名空間,在啟動(dòng)解釋器的時(shí)候自動(dòng)加載進(jìn)內(nèi)存的各種名字所在的空間,比如print,input等不需要定義就可以使用的名字 全局命名空間,就是從上到下所有我們定義的變量名和函數(shù)名所在的空間,是在程序從上到下...

    dack 評(píng)論0 收藏0
  • 【C++初階】 關(guān)鍵字,命名空間,缺省參數(shù),IO和函數(shù)重載

    摘要:事實(shí)上語(yǔ)言當(dāng)中有的內(nèi)容,比如函數(shù)循環(huán)結(jié)構(gòu)體宏等等內(nèi)容,也都有,所以大家千萬(wàn)不要認(rèn)為語(yǔ)言白學(xué)了哈因?yàn)橹耙呀?jīng)完整更新過語(yǔ)言的博客有需要可以往前翻,所以這里直接介紹相對(duì)語(yǔ)言當(dāng)中新增的內(nèi)容,而本章引入的內(nèi)容是的關(guān)鍵字命名空間缺省參數(shù)函數(shù)重載。 ...

    winterdawn 評(píng)論0 收藏0
  • 【數(shù)據(jù)結(jié)構(gòu)初階二叉樹】:二叉樹相關(guān)的性質(zhì)和經(jīng)典的習(xí)題(用C語(yǔ)言實(shí)現(xiàn),附圖詳解

    摘要:當(dāng)集合為空時(shí),稱該二叉樹為空二叉樹。也就是說,如果一個(gè)二叉樹的層數(shù)為,且結(jié)點(diǎn)總數(shù)是,則它就是滿二叉樹。完全二叉樹完全二叉樹是效率很高的數(shù)據(jù)結(jié)構(gòu),完全二叉樹是由滿二叉樹而引出來的。 ...

    Martin91 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<