本节内容
1. 函数简介
2.返回值
3. 参数与局部变量
4.递归
5.匿名函数
6.函数式编程介绍
7.高阶函数
8.内置函数
1.函数简介
函数(function清末根据日语翻译+英语读音译为“方程”),名称出自数学家李善兰的著作《代数学》。之所以如此翻译,他给出的原因是“凡此变数中函彼变数者,则此为彼之函数”,也即函数指一个量随着另一个量的变化而变化,或者说一个量中包含另一个量。
函数是可重复使用的,实现特定功能的代码段。编程中的函数在英文中也有很多不同的叫法。在BASIC中叫做subroutine(子过程或子程序),在Pascal中叫做procedure(过程)和function,在C中只有function,在Java里面叫做method。
1 if cpu利用率 > 90%: 2 #发送邮件提醒 3 连接邮箱服务器 4 发送邮件 5 关闭连接 6 7 if 硬盘使用空间 > 90%: 8 #发送邮件提醒 9 连接邮箱服务器 10 发送邮件 11 关闭连接 12 13 if 内存占用 > 80%: 14 #发送邮件提醒 15 连接邮箱服务器 16 发送邮件 17 关闭连接 18 19 #改进后,减少了重复写代码(既提高代码复用) 20 def 发送邮件(内容) 21 #发送邮件提醒 22 连接邮箱服务器 23 发送邮件 24 关闭连接 25 26 while True: 27 28 if cpu利用率 > 90%: 29 发送邮件('CPU报警') 30 31 if 硬盘使用空间 > 90%: 32 发送邮件('硬盘报警') 33 34 if 内存占用 > 80%:
语法:
def 函数名(): 函数体
ex1:
1 def fun1(): 2 print(3 * 4) 3 4 fun1() 5 print(fun1) 6 # 1、def 关键字 ,读到这个关键字就开始创建一个函数 7 # 2、函数名(): 8 # 3、函数体 9 # 4、在内存中的体现,类似定义了一个fun1的变量,值是函数体,但是函数体并没有执行 10 # 5、调用方法,函数名() 11 # 6、尝试打印函数名
1 def func2(x,y): 2 #加法计算 3 print(x + y) 4 func2(2,4) 5 6 #x,y 叫形式参数,简称形参,也可以是别的名字,跟给变量起名字的规则一样 7 #2,4 叫实际参数,简称实参 8 #在定义函数的过程,形参并没有开辟内存空间
1 def 发送邮件() 2 #发送邮件提醒 3 连接邮箱服务器 4 发送邮件 5 关闭连接while True: 6 7 if cpu利用率 > 90%: 8 发送邮件() 9 10 if 硬盘使用空间 > 90%: 11 发送邮件() 12 13 if 内存占用 > 80%: 14 发送邮件() 15 16 17 #改进型 18 def 发送邮件(邮件内容) 19 20 #发送邮件提醒 21 连接邮箱服务器 22 发送邮件 23 关闭连接 24 25 26 while True: 27 28 if cpu利用率 > 90%: 29 发送邮件("CPU报警了。") 30 31 if 硬盘使用空间 > 90%: 32 发送邮件("硬盘报警了。") 33 34 if 内存占用 > 80%: 35 发送邮件("内存报警了。")
总结:
形参:形式参数,不是实际存在,是虚拟变量,。在定义函数和函数体的时候使用形参,目的是在函数调用时接收实参(实参个数,类型应与实参一一对应)
实参:实际参数,调用函数时传给函数的参数,可以是常量,变量,表达式,函数,传给形参
形参是虚拟的,不占用内存空间,.形参变量只有在被调用时才分配内存单元
实参是一个变量,占用内存空间
数据传送单向,实参传给形参,不能形参传给实参
练习1:写一个简单的计算器,可以计算2个数的加减乘除
练习2:找个实际生产的例子/可以贴几个实际生产的例子
扩展示例:
1 def send_mail(): 2 import smtplib 3 from email.mime.text import MIMEText 4 from email.utils import formataddr 5 6 msg = MIMEText('邮件内容', 'plain', 'utf-8') 7 msg['From'] = formataddr(["赤脚大仙儿",'freedom_chentao@163.com']) 8 msg['To'] = formataddr(["小三儿",'66660929@qq.com']) 9 msg['Subject'] = "主题" 10 11 server = smtplib.SMTP("smtp.163.com", 25) 12 server.login("freedom_chentao@163.com", "邮箱密码") 13 server.sendmail('freedom_chentao@163.com', ['66660929@qq.com',], msg.as_string()) 14 server.quit() 15 send_mail()
默认参数
1 def func(name, age = 18): 2 3 print "%s:%s" %(name,age) 4 5 # 指定参数 6 func('alex', 21) 7 # 使用默认参数 8 func('alex') 9 10 注:默认参数需要放在参数列表最后
返回值
1 def func1(): 2 Y = 3 + 5 3 return Y 4 print(123) 5 func1() 6 A = func1() 7 print(A) 8 9 def func2(): 10 Y = 3 + 5 11 return 123 12 A = func2() 13 print(A)
1、使用return 来返回函数的执行结果
2、函数在执行过程中只要遇到return语句,就会停止执行并返回结果
3、return的内容可以是1个或多个值
4、如果未在函数中指定return,那这个函数的返回值为None
练习发邮件的例子
动态参数
1 def func(*args): 2 3 print args 4 5 6 # 执行方式一 7 func(11,33,4,4454,5) 8 9 # 执行方式二 10 list = [11,2,2,3,3,4,54] 11 func(*list)
1 def func(**kwargs): 2 print(kwargs) 3 #执行方式一 4 func(name='alex',age=21) 5 6 #执行方式二 7 dict = {'name':'fancis', 'age':18, 'gender':'male'} 8 func(**dict)
1 def func(*args, **kwargs): 2 print(args) 3 print(kwargs) 4 5 list = [11,22,33] 6 dict = {'name':'alex','age':18} 7 func(list) 8 func(list,dict) 9 func(*list,dict) 10 func(*list,**dict)
参数的总结:
全局/局部变量
1 def f1(a,b): 2 return a +b 3 4 def f1(a,b): 5 return a * b 6 7 ret = f1(7,6) 8 print(ret)
匿名函数
函数式编程
内置参数
补充:
内置参数
递归
yield
<h3>1.函数基本语法及特性</h3>