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 精简,可读性差
时间: 2024-10-18 09:59:44