函数
一、背景
在学习函数之前,一直遵循:面向过程编程,即:根据业务逻辑从上到下实现功能,其往往用一长段代码来实现指定功能,开发过程中最常见的操作就是粘贴复制,也就是将之前实现的代码块复制到现需功能处,如下:
1 while True: 2 if cpu利用率 > 90%: 3 #发送邮件提醒 4 连接邮箱服务器 5 发送邮件 6 关闭连接 7 8 if 硬盘使用空间 > 90%: 9 #发送邮件提醒 10 连接邮箱服务器 11 发送邮件 12 关闭连接 13 14 if 内存占用 > 80%: 15 #发送邮件提醒 16 连接邮箱服务器 17 发送邮件 18 关闭连接
一看上述代码,if条件语句下的内容可以被提取出来公用,如下:
1 def 发送邮件(内容) 2 #发送邮件提醒 3 连接邮箱服务器 4 发送邮件 5 关闭连接 6 7 while True: 8 9 if cpu利用率 > 90%: 10 发送邮件(‘CPU报警‘) 11 12 if 硬盘使用空间 > 90%: 13 发送邮件(‘硬盘报警‘) 14 15 if 内存占用 > 80%:
对于上述的两种实现方式,第二次必然比第一次的重用性和可读性要好,其实这就是函数式编程和面向过程编程的区别:
- 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可
- 面向对象:对函数进行分类和封装,让开发“更快更好更强...”
函数式编程最重要的是增强代码的重用性和可读性
二、定义和使用
1 def 函数名(参数): 2 3 ... 4 函数体 5 ... 6 返回值
函数的定义主要有如下要点:
- def:表示函数的关键字
- 函数名:函数的名称,日后根据函数名调用函数
- (参数)
- 函数体:函数中进行一系列的逻辑计算,如:发送邮件、计算出 [11,22,38,888,2]中的最大数等...
- 参数:为函数体提供数据
- 返回值:当函数执行完毕后,可以给调用者返回数据。
1、返回值
函数是一个功能块,该功能到底执行成功与否,需要通过返回值来告知调用者。
以上要点中,比较重要有参数和返回值: 1 def 发送短信():
2 发送短信的代码... 3 if 发送成功: 4 return True 5 else: 6 return False 7 8 while True: 9 # 每次执行发送短信函数,都会将返回值自动赋值给result 10 # 之后,可以根据result来写日志,或重发等操作 11 result = 发送短信() 12 if result == False: 13 记录日志,短信发送失败...
返回值数=0:返回None
返回值数=1:返回object
返回值数>1:返回tuple
2、参数
- 1.形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量
- 2.实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值
函数的有三中不同的参数:
- 普通参数
- 默认参数
- 动态参数
-
- 定义函数 (形参和实参)普通参数
-
1 # ######### 定义函数 ######### 2 3 # name 叫做函数func的形式参数,简称:形参 4 def func(name): 5 print(name)
) 6 7 # ######### 执行函数 ######### 8 # ‘xiaoming‘ 叫做函数func的实际参数,简称:实参 9 func(‘xiaoming‘) 10 11 普通参数
-
-
- 指定参数和默认参数
-
1 # name 叫做函数func的形式参数,简称:形参 2 # def func(name, age=18): #age 是默认参数 如果下面没有指定参数,就直接用默认参数 3 # print("%s:%s" % (name, age)) 4 # 5 # 6 # # 指定参数 7 # func(‘wupeiqi‘, 19) #19 替代了默认参数 8 # # 使用默认参数 9 # func(‘alex‘)
-
-
- 动态参数
-
def func(*args): print(args) # 执行方式一 func(11,33,4,4454,5) # 执行方式二 li = [11,2,2,3,3,4,54] func(*li) # 动态参数
def func(**kwargs): print(kwargs) # 执行方式一 func(name = ‘wupeiqi‘,age=18) # 执行方式二 li = {‘name‘:‘wupeiqi‘, "age":18, ‘gender‘:‘male‘} func(**li) #动态参数
时间: 2024-10-14 21:37:54