码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-04-25 15:00:02      阅读:253      评论:0      收藏:0      [点我收藏+]

标签:包含   深度   div   src   ==   img   错误   函数定义   span   

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 精简,可读性差

 

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

标签:包含   深度   div   src   ==   img   错误   函数定义   span   

原文地址:http://www.cnblogs.com/niejinmei/p/6761675.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!