python之函数递归调用与函数式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python之函数递归调用与函数式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2644字,纯文字阅读大概需要4分钟。
内容图文
![python之函数递归调用与函数式](/upload/InfoBanner/zyjiaocheng/619/97854b4671374e15b902324182982dc1.jpg)
Day07 -函数递归
函数递归调用:是函数嵌套调用的一种特殊形式
具体指的是:在调用一个函数的过程中有直接或间接地调用到本身
递归层级最大1000层,可以设置更大但不建议
import sys
sys.getrecursionlimit()#查看
sys.setrecursionlimit(num)#设置
#调用本身
def f1():
print('是我是我还是我')
f1()
f1()
#间接调用
def f1():
print('f1>>>>')
f2()
def f2():
print('f2>>>>')
f1()
f1()
需要的强调的是:尾递归优化(pyton没有)
递归不应该无限的调用,必须在满足某种条件下结束递归调用(用return)
1.递归的两个阶段
1.1 回溯
? 一层一层调用下去
1.2 递推
? 满足某种结束条件,结束递归调用,然后一层一层返回
def age(n):
if n==1:
return 18
return age(n-1)+10
#递归的应用
l=[1,[2,[3,[4,[5,[6,[7,[8,[9,10,11]]]]]]]]]
def func(n):
for x in n:
if type(x) is list:
func(x)
else:
print(x)
func(l)
2.二分法(有序列表)
无序列表可以用num.sort()排序
#原始
num=[-3,4,5,30,13,42,53,65,77,98]
find_num=13
for nums in num:
if nums==find_num:
print('find it')
break
def binarry_search(find_num,num):
print(num)
if len(num)==0:
print('值不存在')
return
mid_index=len(num)//2
mid_val=num[mid_index]
if mid_val < find_num:
num=num[mid_index+1:]
binarry_search(find_num,num)
elif mid_val > find_num:
num=num[:mid_index]
binarry_search(find_num,num)
else:
print('find it')
if __name__ == '__main__':
num=[-3,4,5,30,13,42,53,65,77,98]
find_num=9
binarry_search(find_num,num)
3.面向过程的编程思想
核心是"过程"二字,指的是做事的步骤:先什么、在什么、后干什么
基于该思想就好比设计一条流水线
优点:
- 复杂的问题流程化、进而简单化
缺点:
- 扩展性差
1.不是所有的软件都需要频繁更迭。比如:编写脚本
2.即便是一个软件需要频繁更迭,也不代表这个软件所有组成部分都需要一起更迭
4.函数式
4.1匿名函数lambda
匿名函数用于临时调用一次的场景:更多的是将匿名与其他函数配合使用
lambda x,y : x+y#只是定义了
#调用匿名函数,内存地址加()
#方法一
res=(lambda x,y : x+y)(1,2)
print(res)
#方法二
f=(lambda x,y : x+y)
res=f(1,2)
print(res)
##########################################
#应用
salaries={
'siry':3000,
'tom':7000,
'lili':10000,
'jack':2000
}
#max和min(可迭代对象,key=函数式)和sorted()函数一样
res=min(salaries,key=lambda k:salaries[k])
print(res)
res=max(salaries,key=lambda k:salaries[k])
print(res)
4.2 map(映射)
map(函数,可迭代对象)
l=['alex','lxx','wxx','Lee']
new_l=[name+'_dsb' for name in l ]
print(new_l)
new_l=map(lambda name: name+'_dsb',l)
print(next(new_l))
print(next(new_l))
print(next(new_l))
print(next(new_l))
4.3 filter(过滤)
l=['alex_sb','lxx_sb','wxx','Lee']
new_l=[i for i in l if i.endswith('sb')]
print(new_l)
new_l=filter(lambda name:name.endswith('sb'),l)
print(new_l)
4.4 reduce
py2内置;py3在functools库中
累加操作
from functools import reduce
res=reduce(lambda x,y:x+y,[1,2,3,4,5,6],10)
print(res)
res=reduce(lambda x,y:x+y,l)
print(res)
内容总结
以上是互联网集市为您收集整理的python之函数递归调用与函数式全部内容,希望文章能够帮你解决python之函数递归调用与函数式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。