1. 程式人生 > >Python從零開始系列連載(17)——Python特色資料型別(函式)(上)

Python從零開始系列連載(17)——Python特色資料型別(函式)(上)

函式

說到函式,如果你沒有程式設計基礎,可能馬上會想到初高中學過的:

y = f(x)

例如:y = x +1

當我們 x = 1時,y = 2

x = 2,y = 3

小明:老溼,我們不是初中生!

函式可以將問題簡化,我們可以重複使用這個函式解決 y = x + 1 這一類問題

所以,函式就是那些做成重複使用的程式程式碼

函式的定義

函式是由函式名、引數和函式體組成,格式如下:

def 函式名(形式引數):

函式體

[ return 返回值 ]

def是系統關鍵字,之後的文章會系統講一下,這裡只要知道這個是用來定義函式的

如果是你自己定義函式,函式名要符合變數命名規則,並且不能是系統關鍵字(在jupyter中,打出系統關鍵字是綠色的)

例如,我們定義一個求兩個數的和的函式:

看,這裡的 def 和 return 是綠色的,也就是系統關鍵字

這裡函式名是add(英語是求和的意思)

然後有兩個形式引數,a和b

函式體部分執行的是 c = a +b

最後函式返回的是 c 的值

這就完成了一個求和函式的定義

函式的呼叫

函式的呼叫很簡單,我們只要根據函式的定義形式

將實際計算時的引數值傳進去就行(也可能沒有引數)

函式呼叫格式:

函式名(實際引數)

這裡的 add(3,4) 就是函式呼叫

實際引數分別是 3 和 4

當函式呼叫發生時,才開始執行函式的內容

即給 a 賦值為 3 , b 賦值為 4

然後計算出 c = 7

最後返回 c 的值 7

函式呼叫寫的引數是實際引數(‘實際’體現在引數是實際執行函式使用的)

函式定義寫的引數是形式引數(‘形式’體現在他只是個格式和形式,真正函式執行時候還是先看實際引數)

其實,Python有很多內建函式,例如我們之前課程常常使用的print()

print()函式是內建的,所以不用定義

內建:安裝好Python就有的

還記得以前手機很多內建吸費軟體麼

點進去xxx軟妹幣就沒了,手機簡訊提示欠費了

引數的傳遞

函式呼叫時候,是將實際引數傳遞給形式引數

函式引數的傳遞方法有很多

1.引數按照位置順序傳遞

剛才的add函式就是這種,按順序,3傳遞給a,4傳遞給b

2.引數按賦值傳遞

這裡定義了一個兩數相減的函式

注意到函式呼叫時候,指明瞭 b = 4 , a = 3

是一種賦值,所以這裡的就和上個相加的例子中順序傳遞引數不一樣了

3.引數按照預設值傳遞

有時候,可以在函式定義裡給函式形參設定一個預設值

當函式實參沒有傳遞值進來,就使用預設值

這裡在定義函式時候,給形參 b 設定了預設值 2 

然後呼叫函式時候,只傳遞了一個引數值 4

則python預設將 4 傳遞給 a,因為在定義時候給 b 設定了預設值 2

當然,當傳入的引數是兩個時候,則覆蓋掉預設值,即不使用定義時候的預設引數值

4.(難點)元組型別的變長度引數傳遞

我們寫個列印輸出的函式

如果我們要列印三個數怎麼辦?

小明:老溼,我知道!我們可以這樣!

小明:

很好!小明,如果我們要列印1000個數呢

小明:emmmm

【敲黑板】

我們可以定義一個變長引數,可長可短,你懂的!【壞笑

小明: 這不是去幼兒園的車!我要下車! 

我們可以在引數前面加一個星號 *  ,表示這個引數是可變長引數

當其他引數賦值完畢時候,剩下的引數依次賦值給這個可變長引數

所以剛才的可以這樣實現:

但是,注意到沒有,這裡的 b 是元組 (2,3)

所以你執意要打印出,可以提前修改函式的列印功能

這就通用了,不信你試試:

相當於將字典的每個元素依次拿出來

5.(難點)字典型別的變長度引數傳遞

我們可以在引數前面加兩個星號 **  ,表示這個引數是可變長引數

是以 實參名=字典值的方式傳遞

例如剛才的例子,我們改一下

注意到,字典型別變長引數傳遞一定是賦值形式傳遞進去的

當然,元組和字典形式變長引數也可能用不到,例如:

這樣,打印出的就是空元祖和空字典啦~

如果你執意要實現那種列印形式,我們就改一下函式:

c [ j ] 指的是列印 j 這個鍵對應的值,如果不這樣寫,結果會是這樣,打印出的是鍵:

注意,可變引數的位置一般寫在最後,不能亂了順序,否則會報錯!!!

今天作業是自己跟著操作一遍~

自己不敲程式碼永遠學不會寫程式碼

下課

有需要Python學習資料的小夥伴嗎?小編整理一套Python資料和PDF,感興趣者可以加學習群:548377875,反正閒著也是閒著呢,不如學點東西啦~~

人生苦短,我選Python

未完待續,連載中......