递归函数和高阶函数(Python)

递归函数:在函数的内部自己调用自己,并且有退出函数的出口
def text(n:int) -> int:
    '''
    这是一个正整数返回阶乘的函数
    :param n:
    :return int:
    '''
    if n==1:
        return n
    return n*text(n-1)
print(text(6))

'''
通过调用text 函数给予一个int 类型的数字6,
首先n 进入第九行 n*text(n-1),
由text(n-1)再次进入text()函数,
此时n 为5,以此类推,直到n=1 进入if 模块,
不再进行向下套娃,由if 返回 1,上一阶的text(n-1)变为1,
执行 return 2*1,再次向上一阶返回,直到最上层的一阶,执行 return 6*120 
120是由1*2*3*4*5 得到

'''

 

匿名函数:lambda

        :如果一个函数有一个返回值,并且只有一句代码,可使用lambda 简化

lambda 参数列表 : 表达式
"""
lambda 表达式的参数可有可无
函数的参数在lambda 表达式中完全使用
lambda 表达式能接收任何数量的参数,但只能返回一个表达式的值
直接打印lambda 表达式,输出的是lambda的内存地址
"""

#使用匿名函数做判断
fn = lambda a,b: a if a >b else b
print(fn(1000,500))
'''
将1000传入值a,将500传入b,通过三元表达式判断 if a>b return a else return b
'''

高阶函数:函数作为参数传入,或者返回值是另外一个函数,这样的函数称为高阶函数,高阶函数是函数式编程的体现。函数式编程就是指这种高度抽象的编程范式

#高阶函数
def num_sum(a,b:int)->int:
    '''
    两数取后绝对值相加
    :param a:
    :param b:
    :return:
    '''
    return abs(a)+abs(b)
print(num_sum(-4,-9))       #由于这种方法如果需求改了的话,需要修改源代码,需再次测试和调试,较麻烦所以可以传入函数一个函数,也就是所谓的高阶函数

def num_num2(a,b,i)->int:
    '''
    :param a:
    :param b:
    :param i 传入的函数名,如abs:
    :return:
    '''
    return  i(a)+i(b)
print(num_num2(-7,5,abs)) #个人认为,其实也只是采用了一种小聪明的做法

#第二种是由函数返回函数,不常用
def text(*args):
    #由text() 函数传入数字后,再定义text1() 函数,由text1() 函数算这些数的总和(sum),再由text()返回text1 也就是text1()的函数名,加()即可调用,就算是不调用text1() 函数也是已经计算完成而没有输出
   def text1():
       return sum(args)
   return text1
print(text(1,34,546,6))
print(text(2,543,213,4)()) #其实也是采用一种小聪明的做法
内置高阶函数

map函数:接收的是两个参数,一个是函数名,另一个是序列,功能是将序列中的数值作为函数的参数依据依次传入函数值中执行,再返回列表。返回值是迭代器对象,输出需重新转换

reduce函数:一个参数为函数,另一个参数为序列对象(如:list)。返回值为一个值而不是迭代器对象,故常用于叠加、叠乘等。来自 from functools import reduce 库中(python 内置库)

function:一个有两个参数的函数

sequence:是一个序列,是一些数据的集合。或者是一组数据,可迭代对象

initial:可选,初始参数

返回值:返回函数计算的结果

reduce()函数,使用function函数(有两个参数)先对集合中的sequence第1、2个元素进行操作,如果存在initial参数,则将会以sequence中的第一个元素和initial 作为参数,用作调用,得到的结果再与sequence中的下一个数据用function 函数运算,最后得到一个结果。

filter 函数:python 内建的filter()函数用于过滤序列,和map()类似,filter()也接收一个函数和一个序列;但不同的是filter()把传入的函数依次作用于每个元素,然后根据返回值Ture还是False决定元素的保留与丢弃

sorted 函数:python内置的sorted()函数就可以对list 进行排序 ;和序列中本身的sort 函数类似,格式为 sorted (列表,key=’以...为判断依据‘,reverse='Ture' or 'Flase')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值