小白學 Python(16):基礎數據類型(函數)(上)
- 2019 年 11 月 7 日
- 筆記
人生苦短,我選Python
前文傳送門
引言
跟各位同學講一個好消息,當你看到這篇連載的時候,整個 Python 基礎內容部分已經過大半了。
希望各位同學再接再厲,努力把剩下的部分也看完。
函數
提到函數,沒有接觸過編程的同學會不會想到這個:
y = f(x)
但是,我們在 Python 中使用到的函數和數學中的函數沒有半毛錢關係(額,可能稍微有點關係)。
在 Python 中,我們使用函數是為了簡化問題,將同一類的操作定義為一個函數,在遇到相同的問題調用對應的函數,類似於 y = f(x)
,x = 1
的時候 y = 1
, x = 2
的時候 y = 2
。
所以,函數就是重複使用的程式碼。
定義函數
定義函數的規則如下:
- 函數程式碼塊以 def 關鍵詞開頭。
- 後接函數名稱和圓括弧
()
。 - 圓括弧中可以使用參數。
- 函數內容以冒號起始,並且縮進。
- return 結束函數,可以選擇性地返回一個值。不帶 return 相當於返回 None。
定義一個函數大致長這樣:
def 函數名(形式參數): 函數體 return 返回值
def
是系統關鍵字,至於什麼是系統關鍵字後面我們再聊,這裡僅需要知道 def
是用來定義函數的即可。
系統關鍵字在 PyCharm 中都會高亮顯示,如果沒有高亮,那麼一定是你打錯了。
比如我們現在定義一個求兩數之和的函數:
def add(a, b): c = a + b return c
這個有看不懂的么?
沒有的話我就接著往下聊了,有的話就給我留言吧。
以上我們就完成了一個函數的定義。
函數調用
函數定義好以後我們還需要調用函數才能執行,一個函數放在那裡是不會自動執行的。
廢話,我哪知道你要傳什麼參數過來。。。
我們調用一下剛才寫好的函數:
c = add(1, 2) print(c)
列印結果如下:
3
這裡我們介紹兩個名詞:
- 實際參數:簡稱實參,我們剛才在調用函數的時候傳入 1 和 2 就是實參。主要體現在實際執行函數的時候使用。
- 形式參數:簡稱形參,我們剛才在定義函數的時候
add(a, b)
中的 a 和 b 就是形參。主要體現在它只是一個形式和格式,真正要執行的時候還是要看傳入的實參。
整個函數調用就是將實參傳遞給形參,完成計算後返回,並且列印返回值。
Python 中有很多內置的函數,比如我們之前常用的 print()
、 len()
、 type()
、 id()
等等。
這些函數都是內置的,無需我們定義,所以可以直接拿來使用。
參數的傳遞
按照位置順序傳遞
參數的傳遞有很多種方式,比如剛才我們調用時使用的就是按照位置順序傳遞。
add(1, 2)
按照賦值傳遞
除了按照位置順序傳遞,我們還可以按照賦值來傳遞:
這裡我們先定義一個減法函數。
def subtraction(a, b): return a - b print(subtraction(b=5, a=10))
列印結果如下:
5
默認賦值
那麼除了以上兩種情況,還有沒有其他情況?
當然還有,如果參數有兩個,但是其中一個可能不會傳遞,這時我們可以給它一個默認值。
這裡我們定義一個除法:
def division(a, b=1): return a / b print(division(5)) print(division(10, 5))
在除法中,除數不能為 0 ,不然會報錯,這裡我們給了一個默認值是 1 ,當除數不存在的時候,我們可以取到默認值。
結果列印如下:
5.0 2.0
變長度參數傳遞(元組)
這一塊是難點,注意聽,仔細看,看完細細品。
我們先定義一個列印的函數:
def print_a(a, b): print(a, b)
這時我們可以列印出來 a 和 b ,但是如果我現在不止想列印兩個參數了,我想列印 3 個參數,怎麼辦?
當然,我們可以給這個函數再加一個參數 c ,沒問題:
def print_a(a, b, c): print(a, b, c)
問題又來了,如果我想列印 100 個參數怎麼辦?
emmmmmmmmm,要麼我們就加 100 個形參?
當然不是這麼寫啦,我們可以在參數 b 前面加一個 * ,表示這個參數是可變長參數,當前面的參數都賦值結束後,剩下的參數順次給這個參數賦值。
def print_a(a, *b): print(a, b) print_a(1, 2, 3, 4, 5, 6)
輸出結果如下:
1 (2, 3, 4, 5, 6)
看到沒,這裡剩餘的參數被轉換成了元組的形式進行了輸出列印。
變長度參數傳遞(字典)
我們還可以給這個參數前面加兩個 * ,表示這個參數可以傳遞的數據類型是以字典的形式傳遞的。
def print_b(a, **b): print_a(a, b) print_b(1, q='q', w='w', e='e')
列印結果如下:
1 ({'q': 'a', 'w': 'b', 'e': 'c'},)
當然,變長參數傳遞時,元組和字典也可以不存在,如下:
print_a(1) print_b(1)
結果如下:
1 () 1 ({},)
這時,列印出來的就是空元組和空字元串了。
希望各位同學一定要自己動手敲程式碼。
示例程式碼
本系列的所有程式碼小編都會放在程式碼管理倉庫 Github 和 Gitee 上,方便大家取用。