前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python基础——匿名函数及递归函数

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

作者头像
菲宇
发布2019-06-13 11:22:40
4660
发布2019-06-13 11:22:40
举报
文章被收录于专栏:菲宇

1 匿名函数语法

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

1 2

def f(x): return x * x

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

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

2 匿名函数举例

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

1 2 3 4 5

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

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

1 2

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

递归函数 

1、递归函数定义

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

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

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

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

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

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

递归的深度:

1 2

import sys print(sys.getrecursionlimit())

输出结果为:

1

1000

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

二分法举例:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

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)

输出结果为:

1 2 3

find it find it not exists

求5的阶乘

1 2 3 4 5 6

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

输出结果为:

1

120

方法和函数的区别

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

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

函数没有绑定任何对象

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

函数式编程

函数式编程概念

编程风格

1不会修改外部值的状态

2 精简,可读性差

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年02月28日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 函数式编程
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档