函数--基本格式
编程方法类型
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(["系统告警",'abobo1984@126.com']) 12 msg['To'] = formataddr(["dongye",'wulicheng@gomeholdings.com']) 13 msg['To'] = formataddr(["dongye",'dongye@gomeholdings.com']) 14 msg['subject'] = "告警邮件" 15 16 server = smtplib.SMTP("smtp.126.com",25) 17 server.login("abobo1984@126.com",'abiao555') 18 server.sendmail('abobo1984@126.com',['wulicheng@gomeholdings.com','dongye@gomeholdings.com',], msg.as_string()) 19 server.quit() 20 sendmail()