函数的特性

Posted songzhixue

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数的特性相关的知识,希望对你有一定的参考价值。

函数特性:

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)
 5 def action2(n):
 6     print(starting action2...)
 7     with open(日志记录,a) as f:
 8         f.write(end action%s
%n)
 9 def action3(n):
10     print(starting action3...)
11     with open(日志记录,a) as f:
12         f.write(end action%s
%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
%(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)

 

以上是关于函数的特性的主要内容,如果未能解决你的问题,请参考以下文章

Java 8 新特性总结

VSCode自定义代码片段——声明函数

VSCode自定义代码片段8——声明函数

js代码片段

译ECMAScript 2016, 2017, 2018 新特性之必读篇

使用从循环内的代码片段中提取的函数避免代码冗余/计算开销