本节内容
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%:
View Code
语法:
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>