黄朝忆的个人博客
登录|注册

9. 匿名函数、map函数、filter函数、sorted函数、列表推导式

创建 2026-10-20 00:101720 字3 浏览0 评论

匿名函数

什么是?

    就是没有名字的函数,它无需使用def 关键字去定义


如何

    在python中使用lambda关键字去定义匿名函数,

    格式为: lambda 参数 表达式


何时

    当一个函数只使用一次、只做一点点小事,使用匿名函数会更简洁



案例

# 双参数
v1 = lambda x,y:x+y
print(v1(1, 2)) # 3

# 单参数
v2 = lambda x : x * 2
print(v2(3))  # 6

# 无参数
v3 = lambda : '无参数匿名函数'
print(v3()) # 无参数匿名函数

# 小例子
def calc(fn, a, b = 1):
    print(f'计算结果为:{fn(a, b)}')
calc(lambda x,y : x + y, 1, 2)


注意点:

  • 只能写一行,不能写多行代码
  • 不能写代码块(if、for、while)
  • 冒号右边必须是表达式,且只能写一个表达式。
  • 靛太式结果自动作为返回值



map函数

    map() 把一个函数依次作用到可迭代对象的每个元素上,返回一个“迭代器对象”

    语法:map(操作函数、可迭代对象)

list1 = [10, 20, 30]
# map函数返回值是一个迭代器对象、可以循环遍历或者转换
result = map(lambda x : x * 2, list1)

print(list(result))


注意点

  • 延迟执行:map不会立即执行,只有在“需要结果”时才执行计算
  • 返回的是迭代器对象,且一旦遍历/转换完成,就会被消费、下次再转换/遍历就没有了
  • map不会影响元素数量



filter函数

    filter() 用函数依次判断可迭代对象的每个元素,只保留“判断为真(True)”的元素,返回一个迭代器对象

    语法: filter(函数, 可迭代对象)

nums = [1, 2, 3, 4, 5, 6]

result = filter(lambda x: x % 2 == 0, nums)
print(list(result))   # [2, 4, 6]


注意点

  • 延迟执行:map不会立即执行,只有在“需要结果”时才执行计算
  • 返回的是迭代器对象,且一旦遍历/转换完成,就会被消费、下次再转换/遍历就没有了
  • filter 可能会影响元素数量


sorted函数

    sorted() 把可迭代对象里的元素排序,返回一个新的列表,原数据不变

    语法: sorted(可迭代对象, key=None, reverse=False)

nums = [3, 1, 2]
result = sorted(nums)

print(result)   # [1, 2, 3]
print(nums)     # [3, 1, 2]  原列表没变


key参数

    key 接收一个函数,sorted 会先把每个元素传给这个函数,按函数返回值排序,但结果里保留原元素

    很多时候会看到传一个内置函数,如:key=len; result = sorted(sl, key=len, reverse=True)



reduce函数

    reduce() 把一个函数反复作用到序列的元素上,把序列“压缩”成一个值

    语法: reduce(函数, 可迭代对象, 初始值)


from functools import reduce

nums = [1, 2, 3, 4, 5]
result = reduce(lambda x, y: x + y, nums)
print(result)   # 15



列表推导式

    列表推导式是用一行代码,从一个可迭代对象“生成”一个新列表的写法。

    备注:列表推导式本质上是for循环 + append()的一种简写形式

    语法:[表达式 for 变量 in 可迭代对象]


# 方式1
result = []
for num in nums:
    result.append(num * 2)

print(result)

# 方式2: 用列表推导式
result1 = [ num * 2 for num in nums ]
print(result1)




、、




评论(共 0 条)

编辑器加载中...