在处理功能相似的逻辑时,会出现结构雷同的代码
例如:有两个列表,编写程序分别打印这两个列表
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
开头的栗子是循环打印列表的元素,现在通过函数来优化下代码
# 打印输出列表 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
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 a
def test3(a, b):
return a + b
print(test3(1, 2))
# 输出结果
3
# 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 多个返回值,得到的是一个元组
有时候只想先声明一个函数,但并不想这么快写代码块,怎么办呢
def test():
# 啥代码没有
会爆红
def test():
pass
print("调用函数:", test(), "hahaha")
# 输出结果
调用函数: None hahaha
Python 提供了 pass 语句,代表函数没有功能代码块
函数形参之必填参数、缺省参数、可变参数、关键字参数的详细使用