Day3

本节内容

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>

原文地址:https://www.cnblogs.com/francis818/p/5771493.html