【Python全棧05】函數與參數

    前面忘了說了,由於我是在網易雲課堂圖靈學院上學Python的,很多內容都是借鑑上面講義的,也藉此幫圖靈學院宣傳一波,課程免費,學的又很系統,老師講的很好!

    廣告結束,開始正文。函數和參數兩個我合起來寫,以例子爲主,Python的函數參數設置感覺比C++和Java好用多了。

普通參數

def func(name,age):
    print("我的名字是{0}\n我今年{1}歲了".format(name,age))
func("Salvation",21)

    結果如下:


關鍵字參數

def func(name="no name",age=0):
    print("我的名字是{0}\n我今年{1}歲了".format(name,age))
func(age=21,name="Salvation")

    結果同上。*關鍵字參數的好處是可以調換參數順序

收集參數

def func(*args):
     for i in args:
            print(i,end=" ")
func("Salvation",21)

    結果如下:

    其中,args可以看成是列表或者元組。但其實這種方法並不能很好的達到剛纔的效果。

關鍵字收集參數

def func( **kwargs):
     for k,v in kwargs.items():
            print(k,"...",v)
func(name="Salvation",age=18)

    結果如下:

    實際上,這個結果並不是我想要的,原本預期的結果是和第一個程序類似的效果,但是在函數裏訪問**kwargs的時候一直出現問題,希望以後能夠解決。

收集參數混合調用

    在嘗試的過程中,我遇到了一個非常經典的問題,貼出來分享一下。


    這裏報錯是在說:位置參數跟在關鍵字參數的後面了。*在Python中,必須先解析位置參數。也就是說,在定義函數的時候,我們需把*args放在hobby前面。

    修改後結果如下:

def func(name,age,*args,hobby="沒有愛好",**kwargs):
    print("Hello,大家好")
    print("我叫{0},我今年{1}歲了".format(name,age))
    if(hobby=="沒有愛好"):
        print("我沒有愛好")
    else:
        print("我的愛好是{}".format(hobby))
    print("*"*20)
    for i in args:
        print(i)
    print("*"*20)
    for k,v in kwargs.items():
            print(k,"...",v)

func1 = func("Salvation",18,"我還喜歡看書",hobby="籃球",hobby2="我還喜歡游泳")

收集參數的解包問題

    這裏的解包問題解決了我上面關鍵字收集參數的疑惑。

    對於普通收集參數,若想打印出參數列表的所有元素,我的第一次嘗試是這樣的:

 

    顯然,結果中直接將整個列表打印出來,這就涉及到了列表的解包:


    這裏就跟c++的指針類似的作用。同理,字典也是一樣的。

    錯誤結果:


    我驚奇地發現,這裏竟然出現了TypeError,具體原因我還不太清楚,等到學了字典在另行解答。下面貼出正確結果(字典解包需要**):



發佈了30 篇原創文章 · 獲贊 21 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章