函数特性:
1、代码重用
2、保持一致性
3、可扩展性
定义:函数是指一组语句的集合通过一个名字(函数名)封装起来,要执行这个函数,只需要调用即可;
创建函数:
Python定义函数使用def关键字,一般格式如下:
def hello(): #括号内可添加参数
print('world')
hello() #调用
形参:变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量
实参:可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值
#下面这段代码
a,b = 5,8
c = a**b
print(c)
#改成用函数写
def calc(x,y):
res = x**y
return res #返回函数执行结果
c = calc(a,b) #结果赋值给c变量
print(c)
1.函数基本语法及特性
现在老板让你写一个监控程序,监控服务器的系统状况,当cpu\memory\disk等指标的使用量超过阀值时即发邮件报警,你掏空了所有的知识量,写出了以下代码
while True:
if cpu利用率 > 90%:
#发送邮件提醒
连接邮箱服务器
发送邮件
关闭连接
if 硬盘使用空间 > 90%:
#发送邮件提醒
连接邮箱服务器
发送邮件
关闭连接
if 内存占用 > 80%:
#发送邮件提醒
连接邮箱服务器
发送邮件
关闭连接
上面的代码实现了功能,但即使是邻居老王也看出了端倪,老王亲切的摸了下你家儿子的脸蛋,说,你这个重复代码太多了,每次报警都要重写一段发邮件的代码,太low了,这样干存在2个问题:
- 代码重复过多,一个劲的copy and paste不符合高端程序员的气质
- 如果日后需要修改发邮件的这段代码,比如加入群发功能,那你就需要在所有用到这段代码的地方都修改一遍
def 发送邮件(内容)
#发送邮件提醒
连接邮箱服务器
发送邮件
关闭连接
while True:
if cpu利用率 > 90%:
发送邮件('CPU报警')
if 硬盘使用空间 > 90%:
发送邮件('硬盘报警')
if 内存占用 > 80%:
发送邮件('内存报警')
举例日志记录:
1 def action1(n):
2 print('starting action1...')
3 with open('日志记录','a') as f:
4 f.write('end action%s\n'%n)
5 def action2(n):
6 print('starting action2...')
7 with open('日志记录','a') as f:
8 f.write('end action%s\n'%n)
9 def action3(n):
10 print('starting action3...')
11 with open('日志记录','a') as f:
12 f.write('end action%s\n'%n)
13 action1(1)
14 action2(2)
15 action3(3)
优化后:
1 import time
2
3 time_format = '%Y-%m-%d %X' #时间显示的格式
4 time_corrent = time.strftime(time_format) #取当前时间
5 def logger(n):
6
7 with open('日志记录','a') as f:
8 f.write('%s end action%s\n'%(time_corrent,n))
9 def action1(n):
10 print('starting action1...')
11 logger(n)
12 def action2(n):
13 print('starting action2...')
14 logger(n)
15 def action3(n):
16 print('starting action3...')
17 logger(n)
18 action1(1)
19 action2(2)
20 action3(3)