zoukankan      html  css  js  c++  java
  • python基础——匿名函数及递归函数

    python基础——匿名函数及递归函数

     

    1 匿名函数语法

     

    匿名函数lambda x: x * x实际上就是:

    def f(x):
        return x * x
    

    关键字lambda表示匿名函数,冒号前面的x表示函数参数

     匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果

    2 匿名函数举例

    用匿名函数有个好处,因为函数没有名字,不必担心函数名冲突。此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数:

    >>> f = lambda x: x * x
    >>> f
    <function <lambda> at 0x10453d7d0>
    >>> f(5)
    25
    

    同样,也可以把匿名函数作为返回值返回,比如:

    def build(x, y):
        return lambda: x * x + y * y
    

      

    递归函数 

     

    1、递归函数定义

     

    递归就是引用(或者调用)自己的意思

     

     

     

    有用的递归函数包含以下几个部分:

     

    1 必须有一个明确的结束条件

     

    2 每次进入更深一层递归时,问题规模相比于上次递归都应有减少

     

    3 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用时通过栈stack这种数据结构实现的,每当进入一个函数调用,栈就会加一层帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出,程序会以一个“超过最大递归深度”的错误信息结束)

     

      递归中每次函数被调用,针对这个调用函数的新命名空间会被创建,意味着当函数调用“自身”时,实际上运行的是两个不同的函数(或者说是同一个函数具有两个不同的命名空间)

     

    递归的深度:

    import sys
    print(sys.getrecursionlimit())
    

    输出结果为:

    1000
    

      

    2 递归函数实现二分法举例

    二分法举例:

    data=list(range(1000))
    def sear(num,data):
        if len(data)>1:
            #二分
            mid_index=int(len(data)/2)
            mid_value=data[mid_index]
            if num > data[mid_index]:
                #num在列表的右边
                data=data[mid_index:]
                sear(num,data)
            elif num < data[mid_index]:
                #num在列表的左边
                data=data[:mid_index]
                sear(num,data)
            else:
                print("find it")
                return
        else:
            if data[0]==num:
                print('find it')
            else:
                print('not exists')
    sear(0,data)
    sear(999,data)
    sear(10000,data)
    

    输出结果为:

    find it
    find it
    not exists
    

    求5的阶乘

    def num (n):
        if n == 1:
            return 1
        else:
            return num (n-1)*n
    print(num(5))
    

    输出结果为:

    120
    

      

    方法和函数的区别

      1 调用方法不一样 函数括号 方法点号

      2 方法只对调用它的对象有用

    函数没有绑定任何对象

    方法可以绑定到具体的对象

    函数式编程

     函数式编程概念

    编程风格

    1不会修改外部值的状态

    2 精简,可读性差

  • 相关阅读:
    浅谈移动前端的最佳实践(转)
    程序员的个人发展注意事项(转)
    SQL Server 维护计划实现数据库备份(Step by Step)
    每日一SQL-善用DATEADD和DATEDIFF
    Entity Framework Code First (一)Conventions
    臣服不代表解放你的手
    写在那个毕业五年的日子(转)
    测试驱动开发实践
    领域驱动设计实践上篇(转)
    WebAPI使用多个xml文件生成帮助文档(转)
  • 原文地址:https://www.cnblogs.com/niejinmei/p/6761675.html
Copyright © 2011-2022 走看看