zoukankan      html  css  js  c++  java
  • Python递归函数、匿名函数、过滤函数

    • 递归函数

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

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

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

    import os
    
    def readfiles(filepath, n):
        files = os.listdir(filepath) #获取当前文件夹中的所有文件
        for fi in files: #遍历文件夹中的文件,这里获取的只是本层文件名
            fi_d = os.path.join(filepath,fi) #加入文件夹,获取到文件夹+文件,即将filepath和fi拼接,组成该文件/文件夹的绝对路径
            if os.path.isdir(fi_d): #如果该路径下的文件是文件夹
                print("*"*n)
                readfiles(fi_d,n+1)
            else:
                print("@"*n,fi)
    
    readfiles("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,调用递归实现

    def hano(n, a, b, c):
        if n == 1:
            print(a,"--->",c)
        elif n == 2:
            print(a, "--->", b)
            print(a, "--->", c)
            print(b, "--->", c)
        else:
            hano(n-1, a, c, b)
            print(a, "--->", c)
            hano(n-1, b, a, c)
    
    hano(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:可迭代对象

    返回一个迭代器

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

      输出为:

    <filter object at 0x000002060C6F2748>
    [2, 4, 6, 8, 0]
    [{'id': 3, 'name': 'wangwu', 'age': 20}, {'id': 4, 'name': 'zhaoliu', 'age': 21}]
  • 相关阅读:
    硬盘
    [编译] 6、开源两个简单且有用的安卓APP命令行开发工具和nRF51822命令行开发工具
    [编译] 5、在Linux下搭建安卓APP的开发烧写环境(makefile版)—— 在Linux上用命令行+VIM开发安卓APP
    [Zephyr] 1、在linux上安装Zephyr-OS并跑DEMO
    [编译] 4、在Linux下搭建nRF51822的开发烧写环境(makefile版)
    [BlueZ] 2、使用bluetoothctl搜索、连接、配对、读写、使能notify蓝牙低功耗设备
    [BlueZ] 1、Download install and use the BlueZ and hcitool on PI 3B+
    [python] 3 、基于串口通信的嵌入式设备上位机自动测试程序框架(简陋框架)
    [ARCH] 1、virtualbox中安装archlinux+i3桌面,并做简单美化
    [编译] 3、在Linux下搭建51单片机的开发烧写环境(makefile版)
  • 原文地址:https://www.cnblogs.com/mryanzhao/p/9486139.html
Copyright © 2011-2022 走看看