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
未完待續,連載中......