函数简介
- 函数是具有某种特定功能的代码块,可以重复使用
- 在前面讲解数据类型的时候,其实已经出现了很多 Python 内置函数了
重复性代码
什么是重复性的代码
在处理功能相似的逻辑时,会出现结构雷同的代码
例如:有两个列表,编写程序分别打印这两个列表
a = [1, 2, 3] b = [10, 20, 30] # 打印输出列表 a 的相关信息 print('length of list is %d' % len(a)) i = 0 while i < len(a): print(a[i]) i = i + 1 # 打印输出列表 b 的相关信息 print('length of list is %d' % len(b)) i = 0 while i < len(b): print(b[i]) i = i + 1
明显,两个循环输出的代码块是很类似的,这就叫做重复性代码
重复性代码维护性差
代码的重复性导致程序的可维护性差,当需要修改处理逻辑时,则需要在多处进行修改
函数的作用
- 函数是可重复使用的,用来实现单一功能的代码段
- 使用函数描述程序中功能相似的代码段,从而消除代码的重复性
函数的定义
def 函数名(参数列表): 函数体
简单的栗子
# 简单的栗子 def max(a, b): if a > b: print(a) else: print(b) max(1, 2) max(20, 10) # 输出结果 2 20
- 函数名:max
- 参数列表:有两个 a、b
- 函数功能:判断 a 是否大于 b
解决重复性的代码
开头的栗子是循环打印列表的元素,现在通过函数来优化下代码
# 打印输出列表 x 的相关信息 def print_list(x): print('length of list is %d' % len(x)) i = 0 while i < len(x): print(x[i]) i = i + 1 a = [1, 2, 3] b = [10, 20, 30] print_list(a) print_list(b) # 输出结果 length of list is 3 1 2 3 length of list is 3 10 20 30
当需要修改打印内容的时候,只需要修改函数代码块即可
# 打印输出列表 x 的相关信息 def print_list(x): print('length of list is %d' % len(x)) i = 0 while i < len(x): # 修改此行 print('list[%d] = %d' % (i, x[i])) i = i + 1 a = [1, 2, 3] b = [10, 20, 30] print_list(a) print_list(b) # 输出结果 length of list is 3 list[0] = 1 list[1] = 2 list[2] = 3 length of list is 3 list[0] = 10 list[1] = 20 list[2] = 30
函数的返回
Python 提供了 return 语句用于从函数中返回,当程序执行到 return 语句时,程序从函数中返回到调用函数的地方
实际栗子
# return def test2(): print('Before return') return # 这条语句不会被执行 print('After return') print('Before test') test2() print('After test') # 输出结果 Before test Before return After test
如果用的是 pycharm,after return 这一行会提示 warning:This code is unreachable,这行代码是无法到达的
return 语句有两个常见用途
- 提前退出函数
- 返回具体的数据
提前退出函数
- 通常情况下,函数执行到最后一条语句时退出函数的执行
- 但某些情况下,可以通过 return 语句提前退出函数(向上面的栗子其实就是了)
提前退出函数的栗子
# return def check(gender, age): if gender == 'female': return if age < 50: return print('We only process old man') print(gender) print(age) print(check("male", 49)) print(check("female", 55)) check("male", 55) # 输出结果 None None We only process old man male 55
如果是提前退出函数,那么会返回 None
函数的返回值
return 语句可以携带参数,该参数作为函数的计算结果返回给调用方
return 返回值
return 一个返回值
求和函数
# return a def test3(a, b): return a + b print(test3(1, 2)) # 输出结果 3
return 多个返回值
# return a,b def test4(a, b, c): if a > b: return a, c else: return b, c print(test4(1, 2, 3)) print(test4(2, 1, 3)) # 输出结果 (1, 3) (1, 3)
return 多个返回值,得到的是一个元组
return 语句是必须的吗?
- 不是,函数可以不写 return 语句
- 但变量赋值这个函数的时候,会得到一个 None
函数 + pass 语句
有时候只想先声明一个函数,但并不想这么快写代码块,怎么办呢
错误写法
def test(): # 啥代码没有
会爆红
正确写法
def test(): pass print("调用函数:", test(), "hahaha") # 输出结果 调用函数: None hahaha
Python 提供了 pass 语句,代表函数没有功能代码块
函数参数
函数形参之必填参数、缺省参数、可变参数、关键字参数的详细使用