Python基礎 day4

來源:互聯網
上載者:User

標籤:預設   basic   參數   是你   one   可讀性   問題:   支援   任務   

函數

 

一、函 數的基本文法及特性

首先,我們要明確,函數的出現,目的就是為瞭解決重複代碼的問題。

接下來,舉個栗子來說明:

老闆讓你寫一個監控程式,用來監控伺服器的系統狀況,當CPU,記憶體 ,磁碟等指標超出閾值的時候發郵件警示。

恩,就這麼一個需求,當時拿到手的時候特別高興,覺得我草,終於可以寫代碼了,於是你寫了下面的代碼:

 

while True

         if  cpu利用率 > 90%:

              #發送郵件

           串連郵件伺服器

            發送郵件

             關閉串連

         if   disk > 90%:

              #發送郵件

           串連郵件伺服器

            發送郵件

             關閉串連

           if   mem >80%:

                  #發送郵件

               串連郵件伺服器

               發送郵件

                關閉串連

完畢,你很激動,覺得這是此生寫的最多的Python代碼,不禁暗暗竊喜,想到你把代碼提交給老大以後,老大驚訝的表情,你很享受,於是,第二天,早早的,你提交了代碼,老大姓王,住你家隔壁,人送外號老王。

老王看了看你的代碼,說道,你這個重複代碼太多,每次警示都要重新寫一段發郵件的代碼,太low了,這樣幹 存在2個問題:

1、代碼重複過多,一個勁的copy 和paste不符合高端程式員的氣質。

2、不利用二次使用。

老王接著說,其實很簡單,只需要把重複的代碼提出來,放到一個公用的地方,起個名字,以後誰想用這段代碼,就可以通過這個名字直接調用即可,如下:

def   發送郵件(內容)           #發送寄件提醒            串連郵箱伺服器            發送郵件             關閉串連while  True:          if cpu  >90%:              發送郵件(‘CPU警示’)          if  disk  > 90%:                發送郵件(‘硬碟警示’)           if   mem >80%:                 發送郵件(‘記憶體警示’)

 

你還別說,這麼一些確實省去了不少的重複代碼,而且還增加了可讀性。

說了這麼多,那麼函數到底是什麼呢?

函數一詞來源於數學,但編程中的函數概念,與數學中的函數是有很大的不同的,編程中的函數在英文中也有很多不同的叫法。在BASIC中叫做subroutine(子過程或子程式),在Pascal中叫做procedure(過程)和function,在C中只有function,在Java中叫做method。

特性:

1、減少重複代碼

2、使程式變得可擴充

3、使程式變得易維護

 

文法定義:

def    hanshuming():#函數名         print(“hehe”)sayhi() #調用函數

 

可以帶參數:

#舉個栗子,把下面代碼改成函數

a,b = 5,8c = a**bprint(c)#改成函數def calc(x,y):    res = x**y    return res   # 返回函數執行的結果c = calc(a,b)  #結果賦值給c變數print(c)

 

二、參數與局部變數內建

形參變數只有在被調用時才分配記憶體單元,在調用結束時,即刻釋放所分配的記憶體單元。因此,形參只在函數內部有效。函數調用結束返回主調用函數後則不能再使用該形參變數。

實參可以是常量、變數、運算式、函數等,無論實參是何種類型的量,在進行函數調用時,它們都必須有確定的值,以便把這些值傳送給形參。因此應預先用賦值,輸入等辦法使參數獲得確定值。

 

#改成用函數

def calc(x,y):  #形參    res = x**y    return res c = calc(a,b)  #實參print(c)

 

舉個栗子

def sayhi(name,age,nationality="CN"):    print("Hello,I am %s" % name,age,nationality )sayhi("jixuege",22,"JP")列印結果Hello,I am jixuege 22 JP

 

說明:

上面不傳國籍就使用預設的,傳了就使用傳的參數。

 

非固定參數

如果函數在定義時不確定使用者想傳入多少個參數,就可以用非固定參數

*args

舉個栗子

def stu(name,age,*args):    print(name,age,args)stu("jixuege",22)stu("jixuege",22,"dajiba","python")輸出結果jixuege 22 ()jixuege 22 (‘dajiba‘, ‘python‘)

 

還有一個**args

def stu(name,age,*args,**kwargs):    print(name,age,args,kwargs)stu("jixuege",22)stu("jixuege",22,"python","CN",sex="man",province="xinjiang")輸出結果jixuege 22 () {}jixuege 22 (‘python‘, ‘CN‘) {‘province‘: ‘xinjiang‘, ‘sex‘: ‘man‘}

 

全域與局部變數的區別

在子程式中定義的變數稱為局部變數,在程式的一開始定義的變數稱為全域變數。

全域變數範圍是整個程式,局部變數範圍是定義該變數的子程式。

當全域變數與局部變數同名時:

在定義局部變數的子程式內,局部變數起作用;在其他地方全域變數起作用。

 

三、傳回值及嵌套函數

想要擷取函數的執行結果,就可以用return語句把結果返回

注意:

1、函數在執行過程中只要遇到return語句,就會停止執行並返回結果,所以也可以理解為return語句代表著函數的結束。

2、如果未在函數中指定return,那這個函數的傳回值為none。

 

四、遞迴

什麼叫做遞迴函式?

如果一個函數在內部調用自己本身,這個函數就是遞迴函式。

遞迴特性:

1、必須有一個明確的結束條件。

2、每次進入更深一層遞迴時,問題規模相比上次遞迴都應有所減少。

3、遞迴效率不高,遞迴層次過多會導致棧溢出。

舉個栗子

def calc(n):    print(n)    if int(n/2) == 0:        return n    return calc(int(n/2))calc(10) 輸出結果10521
五、匿名函數

什麼是匿名函數?

匿名函數就是不需要顯示的指定函數。

舉個列子:

#這段代碼def calc(n):    return n**nprint(calc(10))#換成匿名函數calc= lambda n:n**nprint(calc(10))輸出結果1000000000010000000000
六、函數式編程介紹

 

函數式Python內建支援的一種封裝,我們通過把大段代碼拆成函數,通過一層一層的函數調用,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程式設計。函數就是面向過程的程式設計的基本單元。

記住:

函數式編程:講的是數學裡面的函數,跟我上面講的函數不是一回事。

 

七、高階函數

變數可以指向函數,函數的參數能夠接受變數,那麼一個函數就可以接受另一個函數作為參數,這種函數就叫高階函數

舉個栗子

def add(x,y,z):    return z(x) + z(y)res = add(3,-6,abs)print(res) 列印結果9

 

八、內建函數

 

Python基礎 day4

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.