深入瞭解python的函數參數

位置參數

這是一個求等差數列和的函數,使用必需要傳入一個參數n,這就是位置參數

def sum(n):
    sum=0
    i=1
    while i<=n:
        sum+=i
        i+=1
    return sum
result=sum(100)
print(result)

默認參數

默認參數就是,我在函數中已經將一個參數提前設置好瞭值,如果你沒有傳入這個參數的值,就會用我事先設置好的值,如果你傳入瞭就用你的

我這裡定義瞭一個求x的y次方的方法

def power(x,y=2):
    return x**y
print(power((2)))
print(power(2,3))

關鍵字參數

def printmessage(name,age,*args,gender):
    print(name,age,args,gender)
    print(type(args))
printmessage("趙四",40,12345456,"男")

首先來看一下這個問題,我把一個多值參數寫在瞭一個位置參數的前面這會發生什麼事情?

報錯信息:找不到”gender“這個字段對應的值

printmessage(“趙四”,40,12,34,54,56,”男”)

*args是一個多值參數,他把後面所有的值都給收納瞭,所以我們傳入值得時候,需要把對應參數名也寫上,這樣才能識別這是單獨一個參數的值

def printmessage(name,age,*args,gender):
    print(name,age,args,gender)
    print(type(args))
printmessage("趙四",40,12,34,54,56,gender="男")

這個關鍵字參數還有什麼用處呢,隻要指定瞭參數名,我們可以不按函數裡面設置的參數順序傳入值,但是一旦這樣打亂順序,多值參數就無法識別出哪裡是他可以接收值的地方,所以我就傳入瞭其他3個參數

def printmessage(name,age,*args,gender):
    print(name,age,args,gender)
    print(type(args))
printmessage(age=45, gender='男', name='劉能')

可能有人不相信上面的結論

我隨便放哪個位置都是不能識別的

最後一個情況沒有報錯,但是這個語法是錯誤的,他會認定你傳入的1就是name,但是後面再次出現瞭name,並且缺少值得問題還是沒解決

那我們試試用args接收一個元組試試?

printmessage(age=45, gender='男', name='劉能',args=(1,2,3,4))

很遺憾,根本無法識別這個關鍵字

所以打亂順序傳值的時候千萬別有多值參數

多值參數:

可變參數分為2種

接收元組參數:*args 一個*的是接收多個數據放入元組

接受字典參數:**args 兩個*的接受的是k=v類型的數據,將他們放入一個字典

元組:

def sumN(*args):
    # args是參數名
    # 要操作傳入的參數 可以對args(相當於有參數構成的tuple)進行遍歷
    print(args, type(args))
    sum = 0
    for i in args:
        sum += i
    print(sum)
sumN(1,2,3,5)

元組註意的事項就是,如果有參數在接受元組參數的後面,要用關鍵字參數傳值

字典:

def printmessage(name,age,gender,**kw):
    print(name,age,gender,kw)
    print(type(kw))
printmessage("趙四",40,"男",address="象牙山",phonenumber="888888")

傳入字典的多值參數後面是不能跟參數的,他隻能放在函數參數的最後一個位置

還有,想用關鍵值傳遞的,傳入的時候別亂調位置,要是到瞭**args的范圍,就少瞭一個參數

總結

本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!

推薦閱讀: