Python递归函数、匿名函数、过滤函数

  • 递归函数

Python对递归的深度有限制,超过即会报错。所以一定一要注意跳出条件。

1#斐波拉契数列 2#一个数列,第一个数是1,第二个数也是1,从第三个数开始,每一个数是前两个数之和 3#公式:f(1) =1, f(2) = 1, f(3) = f(1) + f(2), ..., f(n) = f(n-2) + f(n-1) 4#例如:1, 2, 3, 5, 8, 13, 21... 5 6def fib(n): 7 if n == 1: 8 return 1 9 elif n == 2: 10 return 1 11 else: 12 return fib(n-2) + fib(n-1) 13 14print(fib(6))

查找指定目录下的所有文件:

1import os 2 3def readfiles(filepath, n): 4 files = os.listdir(filepath) #获取当前文件夹中的所有文件 5 for fi in files: #遍历文件夹中的文件,这里获取的只是本层文件名 6 fi_d = os.path.join(filepath,fi) #加入文件夹,获取到文件夹+文件,即将filepath和fi拼接,组成该文件/文件夹的绝对路径 7 if os.path.isdir(fi_d): #如果该路径下的文件是文件夹 8 print("*"*n) 9 readfiles(fi_d,n+1) 10 else: 11 print("@"*n,fi) 12 13readfiles("d:/my_dir/",0)

 汉诺塔
    n = 1
        1. 直接把盘子从A挪到C,A->C
    n = 2
        1. 把小盘子从A挪到B,A->B
        2. 把大盘子从A挪到C,A->C
        3. 把小盘子从B挪到C,B->C
    n = 3
        1. 把A上的两个盘子,借助C挪到B,调用递归实现
        2. 把A上剩下的大盘子挪到C,A->C
        3. 把B上的两个盘子,借助A挪到C,调用递归实现
    n = n
        1. 把A上的n-1个盘子,借助C挪到B,调用递归实现
        2. 把A上剩下的大盘子,挪到C,A->C
        3. 把B上的n-1个盘子,借助A挪到C,调用递归实现

1def hano(n, a, b, c): 2 if n == 1: 3 print(a,"--->",c) 4 elif n == 2: 5 print(a, "--->", b) 6 print(a, "--->", c) 7 print(b, "--->", c) 8 else: 9 hano(n-1, a, c, b) 10 print(a, "--->", c) 11 hano(n-1, b, a, c) 12 13hano(5,"A","B","C") # 塔A上的5个盘子,挪到塔C
  • 匿名函数

    #匿名函数,计算n的n次方 f = lambda n:n**n print(f(2)) #输出结果为4 print(f(3)) #输出结果为27

语法:函数名= lambda 参数1,参数2,参数3:返回值

注意:

  1.函数的参数可以有多个,多个参数之间用逗号隔开

  2.匿名函数不管多复杂,只能写一行,且逻辑结束后直接返回数据

  3.返回值和正常的函数一样,可以是任意数据类型

  • 过滤函数

语法:filter(function,iterable)

function:用来筛选的函数,在filter中会自动的把iterable中的元素传递给function,然后根据function返回的True或者False来判断是否保留此项数据

iterable:可迭代对象

返回一个迭代器

1lst1 = [1,2,3,4,5,6,7,8,9,0] 2lst2 = filter(lambda x:x%2==0,lst1) #筛选出lst1中的偶数 3print(lst2) 4print(list(lst2)) 5 6lst3 = [{"id":1,"name":'zhangsan',"age":18}, 7 {"id":2,"name":'lisi',"age":19}, 8 {"id": 3, "name": 'wangwu', "age": 20}, 9 {"id": 4, "name": 'zhaoliu', "age": 21}] 10 11lst4 = filter(lambda item:item['age']>19,lst3) #筛选出lst3中年龄大于19的人 12print(list(lst4))

  输出为:

1<filter object at 0x000002060C6F2748> 2[2, 4, 6, 8, 0] 3[{'id': 3, 'name': 'wangwu', 'age': 20}, {'id': 4, 'name': 'zhaoliu', 'age': 21}]
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

swap空间的增减方法

(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )