递归函数、匿名函数

递归函数、匿名函数

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

nums=[1,3,7,11,22,34,55,78,111]
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')])

猜你喜欢

转载自blog.csdn.net/u014297588/article/details/80692521