网站安全扫描工具人民网舆情数据中心官网
文章目录
- 1. 递归
- 2. 递归练习
- 3. 高阶函数
- 4. 匿名函数
- 5.sort方法
1. 递归
递归简单的理解就是自己引用自己,递归函数就是在函数中自己调用自己
def fn() : fn()# 这是一个无穷递归,如果调用fn()程序内存会溢出
递归是一种解决问题的方式,和循环很像。
递归的思想就是:
将一个大问题分解为一个个小的问题,直到问题无法分解,再去解决问题
递归函数的两个条件:
- 基线条件:问题可以被分解为的最小问题,当满足基线条件时,递归将不再执行
- 递归条件:将问题继续分解的条件
# 使用递归函数求任意数的阶乘
def fac(n) : '''该函数用来求任意数的阶乘参数:n 需要求阶乘的数字'''# 基线条件 等于1时不再需要递归if n == 1 : return 1# 递归条件return n * fac(n - 1)print(fac(10))# 结果:
3628800***Repl Closed***
递归和循环类似,基本上可以互相代替
2. 递归练习
练习1:创建一个函数power来为任意数字做幂运算 n ** i
def expon(n,i) : '''该函数用来求解 n 的 i 次幂参数:n 做幂运算的数字i 幂运算次数'''# 基线条件if i == 1 : return n# 递归条件return n * expon(n , i-1)print(expon(2,3))# 结果:
8***Repl Closed***
练习2:创建一个函数,用来检查一个任意的字符串是否是回文字符串(回文字符串是一个对称字符串,例如:上海自来水来自海上)。
def check(txt_s) : '''该函数用来检查输入的字符串是否为回文字符串'''# 基线条件if len(txt_s) < 2 : return Trueelif txt_s[0] != txt_s[-1] : return False# 递归条件return check(txt_s[1:-1])print('上海自来水来自海上 是否为回文:',check('上海自来水来自海上'))# 结果:
上海自来水来自海上 是否为回文: True***Repl Closed***
3. 高阶函数
在Python中,函数是一等对象,具有如下特点:
- 对象是在运行时创建的
- 能赋值给变量或者作为数据结构中的元素
- 能作为参数传递
- 能作为返回值返回
高阶函数:高阶函数至少需要符合以下特点之一:
- 接收一个或多个函数作为参数
- 将函数作为返回值返回
# 判断参数是否为奇数
def fn_Odd(n) : if n % 2 != 0 : return Truereturn False# 判断参数是否为偶数
def fn_Even(n) : if n % 2 == 0 :return Truereturn False# 判断参数是否为3的倍数
def fn_ThreeTimes(n) : if n % 3 == 0 : return Truereturn Falsel = [2,5,7,9,6,21,45,12,35,65]# 定义的高阶函数
def fn_cal(func,lst) : new_list = []for s in lst : if func(s) : new_list.append(s)return new_list# 输出
print(fn_cal(fn_Odd,l))
print(fn_cal(fn_Even,l))# 结果 :
[5, 7, 9, 21, 45, 35, 65]
[2, 6, 12]***Repl Closed***
- filter()函数
在Python中有个内置函数 filter函数 可以实现上面 fn_cal 函数的功能—通过传入一个函数对一个可迭代的对象进行处理。
filter 函数
- 可以从序列中过滤出符合条件的元素,保存到一个新的序列中
- 参数1:函数,根据该函数来过滤序列了(可迭代结构)
- 参数2:需要过滤的序列(可迭代结构)
- 返回值:过滤后新序列(可迭代结构)
eg:res = filter(fn_Odd,l)
4. 匿名函数
匿名函数(lambda函数表达式)专门用来创建一些简单的函数,是一种语法糖。匿名函数一般作为参数使用,其他地方一般不会使用
语法: lambda 参数列表 : 返回值
def fn(a , b) : return a + b# 使用lambda表达式如下
lambda a,b : a + b# lambda的调用
res = filter(lambda i : n % 2 != 0,l)
- map()函数
map()函数可以对可迭代对象中的所有元素做指定的操作,然后将其添加到一个新的对象中返回
l = [1,2,3,4,5,6,7,8]# 对l中的元素进行批量增加1
new_l = map(lambda i : i + 1,l)print(list(new_l))# 结果
[2, 3, 4, 5, 6, 7, 8, 9]***Repl Closed***
5.sort方法
sort()方法用来对列表中的元素进行排序。sort方法默认是直接比较列表中的元素的大小
在sort()可以接受一个关键字参数key,key需要一个函数作为参数,当设置了函数作为参数,每次都会以列表中的一个元素作为参数来调用函数,并且使用函数的 返回值 来比较元素的大小。
# 默认根据字符大小进行比较
s = ['A','BB','CCC','DD','FFFFF','EEEEEE']s.sort()print(s)# 结果
['A', 'BB', 'CCC', 'DD', 'EEEEEE', 'FFFFF']***Repl Closed***
# 根据字符长度进行比较排序
s = ['A','BB','CCC','DD','FFFFF','EEEEEE']s.sort(key=len)print(s)# 结果
['A', 'BB', 'DD', 'CCC', 'FFFFF', 'EEEEEE']***Repl Closed***
s = ['3',2,'1',4,'5',6]s.sort(key=int)print(s)# 结果:
['1', 2, '3', 4, '5', 6]***Repl Closed***
- sorted()函数
这个函数和sort()的用法基本一致,但是sorted()可以对任意的序列进行排序,并且使用sorted()排序不会影响原来的对象,而是返回一个新的对象
s = ['3',2,'1',4,'5',6]print('排序前:',s)
f = sorted(s,key=int)
print('排序后:',s)
print('排序结果:',f)# 结果
排序前: ['3', 2, '1', 4, '5', 6]
排序后: ['3', 2, '1', 4, '5', 6] # 排序前后原数据没有发生变化
排序结果: ['1', 2, '3', 4, '5', 6]***Repl Closed***