函数的特性

python基础

浏览数:233

2019-8-15

函数特性:

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个问题:

  1. 代码重复过多,一个劲的copy and paste不符合高端程序员的气质
  2. 如果日后需要修改发邮件的这段代码,比如加入群发功能,那你就需要在所有用到这段代码的地方都修改一遍
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)

 

作者:村里唯一的架构师