Python学习笔记-5

本文介绍了Python中的递归、lambda表达式和高阶函数的概念及应用。通过示例展示了如何使用lambda简化函数定义,如何利用高阶函数如map()、reduce()和filter()进行序列操作。同时,详细解释了递归的特点和注意事项,包括必须存在退出条件。文章最后以实际代码展示如何在实际问题中应用这些技术,如对字典列表进行排序和计算数的累加。
摘要由CSDN通过智能技术生成

递归、lambda表达式、高阶函数

递归

特点

  • 函数内部自己调用自己
  • 必须有出口

lambda表达式(匿名函数)

应用场景:如果一个函数有一个返回值,并且只有一句代码,可以使用lambda表达式简化

语法:

lambda 参数列表:表达式(必须有返回值

注意

  • lambda表达式的参数可有可无,函数的参数在lambda表达式中完全使用过
  • lambda表达式能接收任何数量的参数但只能返回一个表达式的值

例子1

def func1():
    return 100
print(func1) #<function func1 at 0x0190C4A8>
print(func1()) #100
func = lambda:100 
print(func) #<function <lambda> at 0x03EFD850>
print(func()) # 100

例子2

def add(adef add(a, b):
    return a + b
result = add(2, 3)
print(result)	 #5
fnc1 = lambda a, b: a + b
print(fnc1(1,2)))	#3

例子3

# 无参数
func1 = lambda:100
print(func1()) # 100
# 一个参数
func2 = lambda a:a
print(func2('He')) # He
# 默认参数
func3 = lambda a, b, c=100, d=300: a + b + c + d
print(func3(1, 2, d=4)) #107
# 不定长参数:位置参数
func4 = lambda *args:args[0]+args[1]
print(func4(10,20)) #30
# 不定长参数:关键字参数
func5 = lambda **kwargs: kwargs
print(func5(name='Tom', age=10)) # {'name': 'Tom', 'age': 10}

例子4:

students = [
    {'name': "Tom", 'age': 19},
    {'name': "Rose", 'age': 17},
    {'name': "James", 'age': 15},
    {'name': "Curry", 'age': 10},
    {'name': "Harden", 'age': 18}
]
students.sort(key=lambda x: x['name'])
print(students) #[{'name': 'Curry', 'age': 10}, {'name': 'Harden', 'age': 18}, {'name': 'James', 'age': 15}, {'name': 'Rose', 'age': 17}, {'name': 'Tom', 'age': 19}]

高阶函数

把函数作为参数传入,这样的函数称为高阶函数

def sum_num(a, b, f):
    return f(a) + f(b)
result = sum_num(-1, 2, abs)
print(result) # 3

map(): map(func,lst),将传入的函数变量func作用到lst变量的每个元素中,并将结果组成新的列表(Python 2)或者迭代器(Python 3)返回

list1 = [1,2,3,4,5]
def func(x):
    return x ** 2
result = map(func,list1)
print(result)
print(list(result)) #[1, 4, 9, 16, 25]

reduce():reduce(func,lst),其中func必须有两个参数。每个func计算的结果继续和序列的下一个元素做累积计算

import functools
list1 = [1, 2, 3, 4, 5]
def func(a,b):
    return a + b
result = functools.reduce(func,list1)
print(result)

filter():filter(func,lst)函数用于过滤序列,过滤掉不符合条件的元素,返回的filter对象。可以用list()转化为列表

list1 = [1, 2, 3, 4, 5]
def func(x):
    return x % 2 == 0
result = filter(func, list1)
print(list(result)) #[2, 4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值