匿名函数、递归函数

一、匿名函数

1、函数作为参数

def add(a, b):

    return a + b

def minus(a, b):

     return a - b

def main(function, a, b):  

return function(a, b)

result = main(add, 10, 20)

print(result)

result = main(minus, 10, 20)

print(result)

2、lambda函数

①语法结构:lambda:参数1,参数2....参数n:一行代码

②整个lambda函数只能有一行代码

③自动返回代码的运行结果

④lambda函数一般会直接作为实参传递其他函数

result = main(lambda a, b: a + b, 10, 20)

print(result)

result = main(lambda a, b: a - b, 10, 20)

print(result)

3、map函数,他会将传入的序列中的每一个元素通过一个lambda函数进行修改

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

result = list(map(lambda n: n ** 2, ls))

print(result)

4、filter函数,他会根据lambda函数过滤条件对序列进行筛选

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

result = list(filter(lambda n: n % 2 == 0, ls))

print(result)

5、sort函数,根据lambda函数进行排序

ls = [1, 2, 3, 4, '10', '20']

result = list(sorted(ls, key=lambda n: int(n)))

print(result)

例题:1、列表中的每一个元素都是圆的半径,请生成一个新列表保存,每一个半径对应的面积

ls = [1, 2, 3, 4, 5, 6, 7, 8, 9]

result = list(map(lambda r: 3.14 * r * r, ls))

print(result)

2、生成一个只有质数的新列表

def isPrime(num):

    if num == 1:

        return False

    else:

        for i in range(2, int(num ** 0.5) + 1):

            if num % i == 0:

                return False

        else:

            return True

result = list(filter(isPrime, ls))

print(result)

二、递归函数

自己调用自己的函数就叫递归函数递归本质分治思想,它的思路通常跟我们正常思维不一样递归必须具备两个条件①自己调用自己②要有终止递归的条件

import time

def test():

    test()

test()  # python对递归函数做了限制递归次数不能超过1000次

print("123123")

1、求自然数n以内的和

①def _sum(n):

     result = 0

     for i in range(n):

         result += i

     return result

print(_sum(100))

② n = 100    (递归)

def _sum(n):

    if n == 0:

        return 0

    else:

        return n + _sum(n - 1)

        #  100 + 99 + 98 + ......+ 3 + 2 + 1 + 0

print(_sum(100))

2、求第n项斐波那契数列的值

def fib(n):

    if n == 1 or n == 2:

        return 1

    else:

        return fib(n - 1) + fib(n - 2)

上楼问题:上楼梯有两种方式

①一次跨一个台阶

②一次跨2个台阶问上到第n层 有多少种上法

start = time.time()

print(fib(40))

end = time.time()

print(end - start)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值