函数说明文档
函数是纯代码语言,想要理解其含义,就需要一行行的去阅读理解代码,效率比较低。
我们可以给函数添加说明文档,辅助理解函数的作用。
语法如下:
通过多行注释的形式,对函数进行说明解释
内容应写在函数体之前
在PyCharm中查看函数说明文档
在PyCharm编写代码时,可以通过鼠标悬停,查看调用函数的说明文档
总结:
1. 函数说明文档的作用是?
对函数进行说明解释,帮助更好理解函数的功能
2. 定义语法
:param 用于解释参数
:return 用于解释返回值
函数的嵌套调用
什么是函数的嵌套
所谓函数嵌套调用指的是一个函数里面又调用了另外一个函数
执行效果:
执行过程
如果函数A中,调用了另外一个函数B,那么先把函数B中的任务都执行完毕之后才会回到上次 函数A执行的位置
def input_int(n):
while True:
try:
i = int(input(n))
break
except:
print('您输入错误,重试...')
return i
def fact(n):
j = 1
for i in range(1,n+1):
j = int(i)*j
return j
a = input_int('请输入第1个整数: ')
b = input_int('请输入第2个整数: ')
c = input_int('请输入第3个整数: ')
d = fact(a)+fact(b)+fact(c)
print('预测明年总销售额: ',d)
总结:
1. 什么是嵌套调用
在一个函数中,调用另外一个函数
2. 执行流程
函数A中执行到调用函数B的语句,会将函数B全部执行完成后,继续执行函数A的剩余内容
变量的作用域
局部变量
变量作用域指的是变量的作用范围(变量在哪里可用,在哪里不可用)
主要分为两类:局部变量和全局变量
所谓局部变量是定义在函数体内部的变量,即只在函数体内部生效
变量a是定义在`testA`函数内部的变量,在函数外部访问则立即报错.
局部变量的作用:在函数体内部,临时保存数据,即当函数调用完成后,则销毁局部变量
全局变量
所谓全局变量,指的是在函数体内、外都能生效的变量 思考:如果有一个数据,在函数A和函数B中都要使用,该怎么办? 答:将这个数据存储在一个全局变量里面
global关键字
思考:`testB`函数需要修改变量num的值为200,如何修改程序?
☆ 使用 global关键字 可以在函数内部声明变量为全局变量, 如下所示
def fun7(b):
global a
print('a的值: ', a)
a = 2
print('a+b的值: ',a+b)
a = 3
fun7(13)
print('a的值: ',a)
总结:
1. 什么是局部变量
作用范围在函数内部,在函数外部无法使用
2. 什么是全局变量
在函数内部和外部均可使用
3. 如何将函数内定义的变量声明为全局变量
使用global关键字,global 变量
递归
递归是一种编程思想,应用场景:
- 在我们日常开发中,如果要遍历一个文件夹下面所有的文件,通常会使用递归来实现;
- 在后续的算法课程中,很多算法都离不开递归,例如:快速排序。
-
- 递归的特点函数内部自己调用自己必须有出口
-
1 |
# 3 |
+ 2 + 1 |
2 |
def |
sum_numbers(num): |
3 |
# 1.如果是1,直接返回1 -- 出口 | |
4 |
if num == 1: | |
5 |
return 1 | |
6 |
# 2.如果不是1,重复执行累加: | |
7 |
result = num + sum_numbers(num-1) | |
8 | ||
9 |
# 3.返回累加结果 | |
10 |
return result | |
11 | ||
12 | ||
13 14 15 |
sum_result = sum_numbers(3) # 输出结果为6 print(sum_result) |
执行结果
lambda 表达式
- lambda的应用场景如果一个函数有一个返回值,并且只有一句代码,可以使用 lambda简化。
- lambda语法
- lambda 参数列表 : 表达式
- lambda表达式的参数可有可无,函数的参数在lambda表达式中完全适用。 lambda函数能接收任何数量的参数但只能返回一个表达式的值
快速入门
函数实现
def add(a, b):
return a + b
result = add(1, 2)
print(result)
列表数据按字典key的值排序
students = [
2 {'name': 'TOM', 'age': 20},
3 {'name': 'ROSE', 'age': 19},
4 {'name': 'Jack', 'age': 22}
]
# 按name值升序排列 students.sort(key=lambda x: x['name']) print(students)
# 按name值降序排列
students.sort(key=lambda x: x['name'], reverse=True) print(students)
# 按age值升序排列 students.sort(key=lambda x: x['age'])
高阶函数
函数作为参数传入,这样的函数称为高阶函数,高阶函数是函数式编程的体现。函数式编程就是指这种高度抽象的编程范式。
体验高阶函数
需求:一个函数完成计算任意两个数字的绝对值之和。 在Python中, abs() 函数可以完成对数字求绝对值计算。
1 abs(-10) # 10
def add_num(a, b):
return abs(a) + abs(b) 3
4
result = add_num(-1, 2)
print(result) # 3
4.2.3 filter() filter(func, lst)函数用于过滤序列, 过滤掉不符合条件的元素, 返回一个 filter 对象,。如果要转换为列表,可以使用 list() 来转换。
1 list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
2
3
def func(x):
return x % 2 == 0
6
7
8 result = filter(func, list1) 9
print(result) # <filter object at 0x0000017AF9DC3198>
print(list(result)) # [2, 4, 6, 8, 10]
函数多返回值
问: 如果一个函数如些两个return (如下所示),程序如何执行?
答:只执行了第一个return,原因是因为return可以退出当前函数, 导致return下方的代码不执行
如果一个函数要有多个返回值,该如何书写代码?
按照返回值的顺序,写对应顺序的多个变量接收即可
变量之间用逗号隔开
支持不同类型的数据return
函数多种传参方式
使用方式上的不同, 函数有4中常见参数使用方式:
位置参数
关键字参数
缺省参数
不定长参数
位置参数
位置参数:调用函数时根据函数定义的参数位置来传递参数
注意:
传递的参数和定义的参数的顺序及个数必须一致
关键字参数
关键字参数:函数调用时通过“键=值”形式传递参数.
作用: 可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求.
注意:
函数调用时,如果有位置参数时,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序
缺省参数
缺省参数:缺省参数也叫默认参数,用于定义函数,为参数提供默认值,调用函数时可不传该默认参数的值(注意:所有位置参数必须出现在默认参数前,包括函数定义和调用).
作用: 当调用函数时没有传递参数, 就会使用默认是用缺省参数对应的值.
注意:
函数调用时,如果为缺省参数传值则修改默认参数值, 否则使用这个默认值
不定长参数
不定长参数:不定长参数也叫可变参数. 用于不确定调用的时候会传递多少个参数(不传参也可以)的场景.
作用: 当调用函数时不确定参数个数时, 可以使用不定长参数
不定长参数的类型:
①位置传递
②关键字传递
位置传递
注意:
传进的所有参数都会被args变量收集,它会根据传进参数的位置合并为一个元组(tuple),args是元组类型,这就是位置传递
关键字传递
注意:
参数是“键=值”形式的形式的情况下, 所有的“键=值”都会被kwargs接受, 同时会根据“键=值”组成字典.
总结:
1. 掌握位置参数
·根据参数位置来传递参数
2. 掌握关键字参数
·通过“键=值”形式传递参数,可以不限参数顺序
·可以和位置参数混用,位置参数需在前
3. 掌握缺省参数
·不传递参数值时会使用默认的参数值
·默认值的参数必须定义在最后
4. 掌握不定长参数
· 位置不定长传递以*号标记一个形式参数,以元组的形式接受参数,形式参数一般命名为args
· 关键字不定长传递以**号标记一个形式参数,以字典的形式接受参数,形式参数一般命名为kwargs、