递归函数、匿名函数
1.什么是函数递归
函数递归调用(是一种特殊的嵌套调用):再调用一个函数递归必须要有两个明确的阶段:
递推:一层一层递归用下去
回溯:递归必须一个明确的结果
开始一层一层回溯
2.为什么要用函数递归
3、如何用
'''
递归必须要有一个明确的结束条件
def foo():
print('from foo')
foo()
foo()
from foo
from foo
from foo
from foo
from foo
import sys
print(sys.getrecursionlimit())
sys.setrecursionlimit(90)
def foo(n):
print('from foo',n)
foo(n+1)
foo(0)
def bar():
print('from foo')
bar()
foo()
def foo():
print('from foo')
bar()
foo()
age(5) = age(4) + 2
age(4) = age(3) + 2
age(3) = age(2) + 2
age(2) = age(1) + 2
age = 26
age(n) = age(n-1) + 2
age(1)= 26
有一个从小到大的排列整形数字
nums=[1,3,7,11,22,34,55,78,111]
判断10在不在里面
for item in nums:
if item ==10:
print('find it')
break
else:
print('not exists')
#not exists
def search(search_num,nums):
print(nums)
if len(nums) ==0:
print('not exists')
return
mid_index = len(nums) //2
if search_num> nums[mid_index]:
#in the right
nums=nums[mid_index+1:]
search(search_num,nums)
elif search_num < nums[mid_index]:
#in the left
nums=nums[:mid_index]
search(search_num,nums)
else:
print('find it')
search(55,nums)
def func():
print('frim func')
func()
func()
func()
# frim func
# frim func
# frim func
匿名函数:没有绑定名字的下场是用一次就完了
def func(x,y): #有名函数
return x+y
lambda x,y:x+y#加了括号’( )'就能运行
(lambda x,y:x+y)
res=(lambda x,y:x+y)(1,2)
print(res)#3
f=lambda x,y:x+y
print(f) #<function <lambda> at 0x0000024F6D0B99D8>
print(f(1,2)) #3
max min map filter sorted
求出薪资最高的:
salaries={
'egon':3000,
'alex':10000000,
'yuanhao':2000
}
print(max(salaries))#yuanhao
# 没有说用什么比较(比较依据),python默认用迭代器取出来的key比较
max的工作原理
1.首先讲课迭代的对象变成迭代器对象
2.res=next(ke'die'dai)
print(max(salaries,key=func))#key表示 next(iter_s)
def func(k):
return salaries[k]
print(max(salaries,key=func))
salaries={
'egon':3000,
'alex':10000000,
'yuanhao':2000
}
print(max(salaries,key=lambda k:salaries[k]))
print(max(salaries,key=lambda k:salaries[k]))
l=[0,1,3,-9,22]
l1=sorted(l,reverse=False)
print(l1)
#[-9, 0, 1, 3, 22]
l2=sorted(l,reverse=True)
print(l2)
#[22, 3, 1, 0, -9]
map的工作原理
1首先将可迭代对象变成迭代器对象
2 res=next(可迭代对象),将热水当作参数传给第一参数指点过的函数,然后将该函数的返回值当作map的结果之一
aaa=map(lambda x:x+'_SB',names)
print(aaa)
print(list(aaa))
print([name+'_SB' for name in names])
filter的工作原理
1 首先讲可迭代对象变成迭代器对象
2 res=next(可迭代器对象),将res当作参数传给第一个参数制定的函数,然后filter会判断返回值的真假,如果为真则留下res
names=['alex','egon','wxx','oldboy']
print([name for name in names if name.endswith('boy')])