編程方法類型 1、面向對象:以類為主要思路,定義的關鍵字class 2、面向過程:以過程為主的思路,定義的關鍵字為def 3、函數式編程:(最早)以函數為主要思路,定義的關鍵字為def 註意:過程和函數的區別就是:過程沒有return 函數式編程的優勢 1、減少代碼的重覆使用: 2、方便代碼的可擴展 ...
編程方法類型
1、面向對象:以類為主要思路,定義的關鍵字class 2、面向過程:以過程為主的思路,定義的關鍵字為def 3、函數式編程:(最早)以函數為主要思路,定義的關鍵字為def 註意:過程和函數的區別就是:過程沒有return函數式編程的優勢
1、減少代碼的重覆使用: 2、方便代碼的可擴展性: 3、方便調整整體代碼:
背景:
在學習函數之前,一直遵循:面向過程編程,即:根據業務邏輯從上到下實現功能,其往往用一長段代碼來實現指定功能,開發過程中最常見的操作就是粘貼複製,也就是將之前實現的代碼塊複製到現需功能處,如下:
1 while True: 2 if cpu利用率 > 90%: 3 #發送郵件提醒 4 連接郵箱伺服器 5 發送郵件 6 關閉連接 7 8 if 硬碟使用空間 > 90%: 9 #發送郵件提醒 10 連接郵箱伺服器 11 發送郵件 12 關閉連接 13 14 if 記憶體占用 > 80%: 15 #發送郵件提醒 16 連接郵箱伺服器 17 發送郵件 18 關閉連接
通過上述代碼可以判斷,if條件語句下的內容可以被提取出來公用,如下:
1 def 發送郵件(內容) 2 #發送郵件提醒 3 連接郵箱伺服器 4 發送郵件 5 關閉連接 6 7 while True: 8 9 if cpu利用率 > 90%: 10 發送郵件('CPU報警') 11 12 if 硬碟使用空間 > 90%: 13 發送郵件('硬碟報警') 14 15 if 記憶體占用 > 80%:
對於上述的兩種實現方式,第二次必然比第一次的重用性和可讀性要好,其實這就是函數式編程和麵向過程編程的區別:
- 函數式:將某功能代碼封裝到函數中,日後便無需重覆編寫,僅調用函數即可
- 面向對象:對函數進行分類和封裝,讓開發“更快更好更強...”
- 函數式編程:最重要的是增強代碼的重用性和可讀性。
函數的格式
1 def 函數名(參數): 2 ..... 3 函數體(功能腳本) 4 ..... 5 返回值
函數的定義特點
1、def:表示創建函數的關鍵字。 2、函數名:函數的名稱,日後根據函數名調用函數。 3、(參數):為函數體提供數據。 4、函數體:函數中進行一系列的邏輯計算,如:發送郵件,計算出[11,22,33,44,55]中最大的數等。。。。 5、返回值:函數是一個功能塊,該功能到底執行成功與否,需要通過返回值來告知調用者。
函數的主要作用:把一個功能放到一個函數里,並起好名稱,將來可以進行調用。
發送郵件函數
1 #!/usr/bin/env python 2 # -*- coding:utf8 -*- 3 # Author:Dong Ye 4 5 def sendmail(): 6 import smtplib 7 from email.mime.text import MIMEText 8 from email.utils import formataddr 9 10 msg = MIMEText ('第一次玩郵件測試,騷擾下,請見諒','plain','utf-8') 11 msg['From'] = formataddr(["系統告警",'[email protected]']) 12 msg['To'] = formataddr(["dongye",'[email protected]']) 13 msg['To'] = formataddr(["dongye",'[email protected]']) 14 msg['subject'] = "告警郵件" 15 16 server = smtplib.SMTP("smtp.126.com",25) 17 server.login("[email protected]",'abiao555') 18 server.sendmail('[email protected]',['[email protected]','[email protected]',], msg.as_string()) 19 server.quit() 20 sendmail()