Python----函数进阶
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- 
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元存款。
 
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号