函数进阶
- 多函数程序执⾏流程
- 拆包
- 递归
- 可变和不可变类型
多函数程序执⾏流程
- 共用全局变量
python
# 1. 定义全局变量
num = 0
def test1():
global num
# 修改全局变量
num = 100
def test2():
# 调⽤test1函数中修改后的全局变量
print(num)
test1()
test2() # 100
- 返回值作为参数传递
python
def test1():
return 50
def test2(num):
print(num)
# 1. 保存函数test1的返回值
result = test1()
# 2.将函数返回值所在变量作为参数传递到test2函数
test2(result) # 50
拆包和交换变量值
- 拆包-元组
python
t1 = (1,2,3)
a,b,c = t1
print(a)
print(b)
print(c)
- 函数返回多个值
python
def return_num():
return 100, 200
num1, num2 = return_num()
print(num1) # 100
print(num2) # 200
递归
- 函数内部⾃⼰调⽤⾃⼰
- 必须有出⼝
1,2,3数字的累加和
python
def sum_numbers(num):
if num == 1:
return 1
result = num + sum_numbers(num-1)
return result
print(sum_numbers(3))
执行流程

递归三原则:
- 递归必须有停止条件
- 递归必须改变其状态并向停止条件靠近
- 递归必须递归地调用自己
lambda 表达式
lambda表达式,又名匿名函数
如果⼀个函数有⼀个返回值,并且只有⼀句代码,可以使⽤ lambda简化。
语法
python
lambda 参数列表 : 表达式
- 注意
lambda表达式的参数可有可⽆,函数的参数在lambda表达式中完全适⽤。
lambda函数能接收任何数量的参数,但只能返回⼀个表达式的值
快速上手
python
# 函数
def fn1():
return 200
print(fn1())
# lambda表达式
fn2 = lambda: 100
print(fn2())
夹带参数
python
# 函数
def add(a, b):
return a + b
result = add(1, 2)
print(result)
# lambda表达式
fn = (lambda a, b: a + b)(1, 2)
print(fn)
lambda的参数形式
- 无参数
python
fn = (lambda: 100)()
print(fn)
- 一个参数
python
fn = (lambda b: a)("hello python")
print(fn)
- 默认参数
python
fn = (lambda a, b, c=100: a + b + c)(10, 20)
print(fn)
- 不定长参数
python
fn1 = (lambda *args: args)(10, 20, 30)
print(fn1)
fn2 = (lambda **kwargs: kwargs)(name='python', age=20)
print(fn2)
- 待判断的lambda
python
fn = (lambda a, b: a if a > b else b)(1000, 500)
print(fn)
- 列表数据按字典key的值排序
python
students = [
{'name': '张三', 'age': 20},
{'name': '李四', 'age': 19},
{'name': '王五', 'age': 22}
]
# 按age值升序排列
students.sort(key=lambda x: x['age'], reverse=True)
print(students)
内置函数
- abs()
abs() 函数可以完成对数字求绝对值计算。
python
def add_num(a, b):
return abs(a) + abs(b)
result = add_num(-1, 2)
print(result) # 3
- map(function, iterable),
将传⼊的函数变量function作⽤到iterable变量的每个元素中,并将结果组成新的列表
- function -- 函数
- iterable -- 序列
实例
python
list1 = [1, 2, 3, 4, 5]
def func(x):
return x ** 2
result = map(func, list1)
print(result)
print(list(result))
- filter()
filter(func, lst)函数⽤于过滤序列, 过滤掉不符合条件的元素, 返回⼀个 fifilter 对象,。如果要转换为列表
python
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
def func(x):
return x % 2 == 0
result = filter(func, list1)
print(result)
print(list(result))
作业
定义一个模拟ATM存款的函数和取钱的函数, 并将每次操作后余额打印出来
你身上有100元,存了60后,你身上还剩40,这时候ATM机有60
你取了20块,这时候ATM机有40
递归:求1-20的阶乘1x2x3x4x5x...x20