多函数程序执⾏流程
共用全局变量
# 1. 定义全局变量
num = 0
def test1():
global num
# 修改全局变量
num = 100
def test2():
# 调⽤test1函数中修改后的全局变量
print(num)
test1()
test2() # 100
返回值作为参数传达
# 例:
def func1():
return 100
def func2(num):
print(num + 100)
result = func1()
func2(result)
函数返回多个值
def func3():
return 100, 12
print(func3())
# >>>(100, 12) 函数返回多个值时,以元组类型返回
a, b = func3()
print(a)
# >>>100
print(b)
# >>>12
递归
- 函数内部⾃⼰调⽤⾃⼰
- 必须有出⼝
递归三原则:
- 递归必须有停止条件
- 递归必须改变其状态并向停止条件靠近
- 递归必须递归地调用自己
#例 ①:
def func4():
print("I Love You")
func4()
#例 ②:
def func5():
print("I Love You")
return func5()
#不加return 函数调用时前面的函数继续执行
#加return后,函数在调用时前面的函数将会结束
# 用递归实现:
# 输入整数n,实现n内所有整数的累加
def sum_numbers(n):
if n == 1:
return 1
else:
result1 = n + sum_numbers(n - 1)
return result1
lambda 表达式
lambda表达式,又名匿名函数
使用场景:
如果⼀个函数有⼀个返回值,并且只有⼀句代码,可以使⽤ lambda简化。
语法:
lambda 参数列表 : 表达式
- 注意
lambda表达式的参数可有可⽆,函数的参数在lambda表达式中完全适⽤。
lambda函数能接收任何数量的参数,但只能返回⼀个表达式的值
labmda表达式的使用:
# 例:
def func7():
return 100
# lambda 表达式
f3 = (lambda: 100)
print(f3()) # 调用lambda时,加括号
f1 = (lambda: 100)() # 最后一个括号表示调用
print(f1)
# 含有参数
f2 = (lambda num1, num2: num1 + num2)(1, 2) # 最后一个括号传参
print(f2)
# 传参
f3 = (lambda num1, num2: num1 + num2)
print(f3(1, 2))
# 一个参数
f4 = (lambda num1: num1)("hello")
print(f4)
# 默认参数
f5 = (lambda num1, num2, num3=100: num1 + num2 + num3)(10, 20)
print(f5)
# 不定长参数
f6 = (lambda *args: args)(1, 2, 3, 4, 5, 5, 6)
print(f6) # 返回字典
f7 = (lambda **kwargs: kwargs)(name="张三", age=18)
print(f7) # 返回字典
# 表达式为三目运算
f8 = (lambda num1, num2: num1 if num1 > num2 else num2)(100, 200)
print(f8)
# 列表数据按字典key的值排序
students = [
{'name': '张三', 'age': 20},
{'name': '李四', 'age': 19},
{'name': '王五', 'age': 22}
]
students.sort(key=lambda num1: num1["age"], reverse=True) # 升序排列
print(students)
内置函数
①abs():绝对值运算
def func8(num1, num2):
return abs(num1) + abs(num2)
result = func8(-2, 4)
print(result)
②map(function,iterable):
将传⼊的函数变量function作⽤到iterable变量的每个元素中,并将结果组成新的列表:
# 例:
list1 = [1, 2, 3, 4, 5]
def fnc9(x):
return x ** 2
result = map(fnc9, list1)
print(result)
# >>><map object at 0x000001A7D3C1FD00>
print(list(result))
# >>>[1, 4, 9, 16, 25]
③filter():
过滤,filter(func, lst)函数⽤于过滤序列, 过滤掉不符合条件的元素, 返回⼀个 fifilter 对象,。如果要转换为列表
# 例
list2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
def func10(x):
return x % 2 == 0
result = filter(func10, list2)
print(result)
# >>> <filter object at 0x00000218336C3C40>
print(list(result))
# >>>[2, 4, 6, 8]