目录
- 前言
- 递归函数
- lambda的运用
- 内置高阶函数
- 总结
前言
本节要说的内容比较套娃,请自带大脑循环。
递归函数
简单说一下就是:自己用自己!
其实就是函数嵌套的一个特殊的例子,自己是个函数,并调用自身,只不过函数必须携带出口,也就是要有return才行。
# 求 1+2+3的值
def sum_numbers(num):
if num == 1:
return 1
elif num < 0: # 这里的作用是为了防止 num为负数或0 造成递归深度过深
return 0
return num + sum_numbers(num-1)
result = sum_numbers(3)
print(result)
流程图
什么是递归过深,就是一直处于无限套娃,程序死循环!
lambda的运用
它是指 函数如果只存一个判断条件下,并且有一个return返回,那就用lambda简化写法,具体示例代码如下:
# 原代码
def add(a,b):
return a + b
result = add(1,2)
print(result)
# lambda代码
fn1 = lambda a,b: a+b
print(fn1(1,2))
lambda格式:函数名 = lambda 参数,参数,… : 返回值表达式
当然除了固定值的返回,也可以存在if判断控制的返回值
# lambda 的if语句
fn5 = lambda a,b: a if a>b else b # lambda 参数 : 三目运算
print(fn5(1000,2000))
格式:函数名 = lambda 参数,参数,… : 三目运算的返回值
内置高阶函数
高阶函数其实也没难度,就把一个函数当成 参数传递给 另一个函数!
具体示例代码:
首先,我们来了解两个函数,abs() 这是用来取绝对值; round() 这是是用来四舍五入。
知道这两个函数的作用,我们现在来进行 函数参数传递的操作。
# 1.abs() 绝对值函数
a = abs(-10) # 10
print(a)
# 2. round() 四舍五入函数
b = round(532.11) # 532
print(b)
# 按照原本的方式,如果我们要用函数求到值
# 方法一
def add_num(a,b):
return abs(a) + round(b) # 事先得进行函数嵌套,然后再返回一个值做运算
result = add_num(-10,62.9)
print(result)
# 方法二 :高阶函数, f作为形参用来传入函数式
def add_num1(a,b,f):
return f(a) + f(b)
result1 = add_num1(-3,-2,abs) # 就是将abs() 作为一个参数 直接传到 函数内部做参数函数,f = abs()
print(result1)
然后这里介绍一下三个常用的内置高阶参数:
1. map()
# 三个常用的内置高阶函数
# map(func函数式,lst列表)将传入的函数变量作用到lst变量中元素中
# 并将结果组成新的列表返回给迭代器
list1 = [1,2,3,4,5,6,7,8]
def fiss(x):
return x ** 2
fiss = lambda x : x**2
result = map(fiss,list1)
print(list(result))
2.reduce()
# reduce(func函数式,lst列表),注意:其中有func必须有两个参数。
# 每次func计算的结果继续和序列的下个元素做累积计算
import functools
list2 = [1,2,3,4,5]
def func(a,b):
return a + b
result = functools.reduce(func,list2)
print(result)
3.filter()
# filter(func函数式,lst列表)过滤函数,用于过滤不符合条件的元素
# 然后返回一个filter对象,要转化为列表就需要使用list()函数
list3 = [1,2,3,4,5,6,7,8,9,10]
def func2(x):
return x % 2 == 0
result = filter(func2,list3)
print(list(result))
总结
以上就是高阶函数和递归的基本内容,如果有做科学计算可自己深入了解!这里就不多做介绍了。