Python:高阶函数map、filter、sorted、递归、闭包

本文深入探讨函数式编程的核心概念,包括函数作为一等公民、高阶函数如map、filter和sorted的应用,以及递归和闭包的特性与使用场景。通过具体示例,解析函数式编程如何简化复杂问题,并讨论其优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数式编程
函数式编程是指用一系列函数解决问题

函数是一等公民(Guido)

好处:
	用每个函数完成细小的功能,一系列函数的任意组合可以解决
		大问题
	函数仅接收输入并产生输出,不包含任何能影响输出的内部状态

**函数的可重入性**
当一个函数的输入实参一定.结果也必须一定的函数称为
	可重入函数
说明:
	可重入函数在函数内部一定不访问除局部变量以外的变量
示例:
    # 可重入函数:
    def myadd(x, y):
       return x + y
    # 不可重入函数
    s = 0
    def myadd2(x, y):
        global s
        s += x + y
        return s

高阶函数 High Order Function, map 、filter、sorted

什么是高阶函数
满足下列条件中一个的函数即为高阶函数
  	1. 函数接受一个或多个函数作用参数传入
  	2. 函数返回一个函数

map 函数

map(func, *iterable)  返回一个可迭代对象,此可迭代
对象用函数 func对可迭代对象iterable中的每一个
元素作用参数计算后得一结果,当最短的一个可迭代对
象不再提供数据时可迭代对象生成数据结束
示例:
    def power2(x):
        return x ** 2
    # 生成一个可迭代对象,此可迭代对象可以生成1~9的
    # 整数的平方
    for x in map(power2, range(1, 10)):
        print(x)
    # 生成一个可迭代对象, 此可迭代对象可以生成:
      1**4, 2**3, 3**2, 4**1
      
    def mypower2(x, y):
        return x ** y

    for x in map(mypower2,[1,2,3,4],[4,3,2,1]):
        print(x)
# 看懂下面程序在做什么:
for x in map(pow, [1,2,3,4], [4,3,2,1],
             range(5, 10)):
    print(x)

filter函数:

filter(function, iterable)   返回一个可迭代对象
此可迭代对象将iterable提供的数据用函数function
进行筛选,function将对iterable中的每个元素求值
返回False将此数据丢弃,返回True则保留
示例:
    def isodd(x):
       return x % 2 == 1
    # 打印0~10之间所有的奇数:
    for x in filter(isodd, range(11)):
        print(x)
    for x in filter(lambda x:x%2, range(11)):
        print(x)
    
    L = [x for x in filter(isodd, range(11))]

sorted函数

作用:
	将原可迭代对象提供的数据进行排序, 生成排序后的列表
格式说明
	sorted(iterable, key=None, reverse=False)
	返回一个新的包含所有可迭代对象中数据的列表,新的列表
		是排序过的列表
参数说明:
	iterable  可迭代对象
	key     函数是用来提供一个值,这个值将作用排序的依据
	reverse  标志用来设置是否降序排序(默认为升序))
  示例:
    L = [5, -2, -4, 0, 3, 1]  
    L2 = sorted(L)  # L2=[-4, -2, 0, 1, 3, 5]
    L3 = sorted(L, reverse=True)  # 从大到小排序

    L4 = sorted(L, key=abs)  # L4=[0, 1, -2, 3, -4, 5]
                             # 依据 0, 1,  2, 3,  4, 5

    names = ['Tom', 'Jerry', 'Spike', 'Tyke']
    sorted(names)  # ['Jerry', 'Spike', 'Tom', 'Tyke']
    sorted(names, key=len)
    sorted(names, key=len, reverse=True)

递归函数 recursion

 函数直接或间接的调用自身
	示例:
    # 函数直接调用自身
    	def f():
        	f()  # 调用自己
    	f()
    	# 函数间接调用自身
    	def fa():
        	fb()
    
    	def fb():
        	fa()
		fa()


递归说明:
	递归一定要控制递归的层数,当符合某一条件时要终止递归调用
	几乎所有的递归都能用while循环来代替

递归的优缺点:
	优点:递归可以把问题简单化,让思路更为清晰,代码更简洁
	缺点: 递归因系统环境影响大,当递归深度太大时,可能会
		得到不可预知的结果

递归函数的执行分为两个阶段:
递推阶段: 调用进入函数内部
回归阶段: 返回结果,得到最终结果

闭包 closure

什么是闭包
闭包是指引用了此函数外部变量的函数
(外部变量指:外部嵌套函数作用域内的变量)

闭包必须满足三个条件:
	1. 必须有一个内嵌函数
	2. 内嵌函数必须引用外部函数中的变量
	3. 外部函数返回值必须是内嵌函数

注意点:
	由于闭包会使得函数中的变量都被保留在内存中,内存消耗
	比较大,所以不能滥用闭包
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值