- 函数的返回值作为参数传递给其他函数
def func():
return 50
def func1(num):
print(num + 100)
func1(func())
- 函数返回多个值
def func():
#返回值可以是列表或元组,但函数内不能出现两个return
#函数执行到返回值时,返回数据并退出当前函数
#也可以写成return 100,200
return [100, 200]
#用一个变量接收多个返回值相当于*args
num = func()
#多变量接收等同于拆包,列表和元组都可以拆包,集合无序拆包无意义
num1, num2 = func()
#一个变量名接收多个变量,它的类型是元组
print(num) #(100,200)
print(num1) # 100
print(num2) # 200
返回值输出为一个列表
def func():
num_list = []
for data in range(1, 10):
num_list.append(data)
#return如果与num_list.append齐行,则只会遍历一个数据后就return
#放在与for齐行,则会遍历完所有数据后返回列表
return num_list
print(func())
函数被调用时才会执行函数内的代码,有return后函数才会有返回值,返回值可以被其他函数使用。
如函数没有return,调用时返回None
- 全局变量可以直接使用,修改变量时需要global定义
num = 100
def func():
global num
#使用全局变量
result = num + 100
#修改全局变量
num += 100
return num
print(func())
递归
- 函数内部⾃⼰调⽤⾃⼰
- 必须有出⼝
1,2,3数字的累加和
def sum_numbers(num):
if num == 1:
return 1
result = num + sum_numbers(num-1)
return result
print(sum_numbers(3))
执行流程:
逻辑解读:
'''
在运算过程中,算式里的函数也会执行调用!
第一次循环:
if条件不满足
执行到result = num + func(num-1)时,num == 3
则result = sum + func(num-1)为result = 3 +func(2)
调用func(2)
没有返回值
进入第二次内循环
第二次内循环
调用func(2)后,sum == 2
if条件不满足
执行到result = num + func(num-1)时,num = 2
则result = sum + func(num-1)为result = 2+func(1)
调用func(1)
没有返回值
进入第三次内循环
第三次内循环
满足if条件
return 1
返回了1
第一次返回
返回1给第二次调用的func(num-1)既 func(1),1就是第二次调用函数的返回值
此时 执行result = num+func(num-1) 为result = 2 + 1
执行return result 此时result = 3
第二次返回
返回3 返回给第一次调用的 func(num-1),既func(2),3就是第一次调用函数的返回值
此时 在次执行result = num + func(num-1) 为result = 3 + 3
执行return result 此时result = 6
'''
递归三原则:
- 递归必须有停止条件
- 递归必须改变其状态并向停止条件靠近
- 递归必须递归地调用自己
lambda 表达式
lambda表达式,又名匿名函数
如果⼀个函数有⼀个返回值,并且只有⼀句代码,可以使⽤ lambda简化。
语法
lambda 参数列表 : 表达式
- 注意
lambda表达式的参数可有可⽆,函数的参数在lambda表达式中完全适⽤。
lambda函数能接收任何数量的参数,但只能返回⼀个表达式的值
lambda的参数形式
- 无参数
fn = (lambda: 100)()
print(fn)
- 一个参数
fn = (lambda b: a)("hello python")
print(fn)
- 默认参数
fn = (lambda a, b, c=100: a + b + c)(10, 20)
print(fn)
- 不定长参数
fn1 = (lambda *args: args)(10, 20, 30)
print(fn1)
fn2 = (lambda **kwargs: kwargs)(name='python', age=20)
print(fn2)
- 待判断的lambda
fn = (lambda a, b: a if a > b else b)(1000, 500)
print(fn)
- 列表数据按字典key的值排序
students = [
{'name': '张三', 'age': 20},
{'name': '李四', 'age': 19},
{'name': '王五', 'age': 22}
]
# 按age值升序排列
students.sort(key=lambda x: x['age'], reverse=True)
print(students)
用DEF函数来表示:
def fn7(x):
return x["age"]
students.sort(key=fn7, reverse=False)
print(students)
内置函数
- abs()
abs() 函数可以完成对数字求绝对值计算。
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 -- 序列
实例
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 对象,。如果要转换为列表
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元存款。