嵌套&匿名&高阶&高阶函数和函数的递归

嵌套&匿名&高阶&内置函数和函数的递归

嵌套函数

函数里的变量是互相独立的,变量的查找顺序也是从当前层依次往上层找,因此函数里面还可以写函数,所以称为嵌套函数。

name = "孙悟空"
def change():
    name = "孙悟空,自学编程"
    def change2():
        name = "孙悟空,自学编程,学习的语言为python"
        print("第3层打印", name)
    change2()  # 调用内层函数change2,打印第三层
    print("第2层打印", name)
change()#调用change,打印第二层
print("最1层打印", name)
#执行结果
# 第3层打印 孙悟空,自学编程,学习的语言为python
# 第2层打印 孙悟空,自学编程
# 最1层打印 孙悟空

匿名函数

匿名函数就是不需要显式的指定函数名,匿名函数需要lambda申明,匿名函数本身作用不大,需要其他函数搭配使用,从而简化代码。
例如lambda x,y:x*y
冒号前面为匿名函数的形参,冒号后面为传入的值

#下面就是将三元表达式和匿名函数以及map函数在一起运用
res=map(lambda x:x**2 if x<10 else x-5 ,[1,2,3,4,6,9,15,20])
print(res)
for i in res:
    print(i)
#运行结果
# <map object at 0x000001EEB1E53198>
# 1
# 4
# 9
# 16
# 36
# 81
# 10
# 15

高阶函数

变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。

def abs1(n):#求绝对值
    if n<0:
        n=int(str(n).strip('-'))
    return n
def qiuhe(x,y,f):#形参f为传入一个函数
    sum=f(x)+f(y)
    return sum
res=qiuhe(-2,-3,abs1)
print(res)
#执行结果
#5

函数的递归

在函数内部,可以调用其他函数。如果一个函数在内部调用自已本身,这个函数就叫做递归函数。

递归特性:

1.必须有一个明确的结束条件
2.每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3.递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

用递归实现2分查找的算法
while True:
    res=False
    def erfenfa(a,b,x,l):
        k=int((a+b)/2)
        if a<b:
            if x==l[k]:
                global res
                res=True
            elif x<l[k]:
                b=k-1
                erfenfa(a,b,x,l)
            elif x>l[k]:
                a=k+1
                erfenfa(a,b,x,l)
                
    l=[1,5,9,10,12,13,14,15,16,17,20,23,25,28,29,33,35,44,55]
    a=0
    b=len(l)-1
    print('输入你所查找的值:')
    x=int(input().strip())
    erfenfa(a,b,x,l)
    if res:
        print('该值在l中')
    else:
       print('该值不在l中')
#执行例子
# 输入你所查找的值:
# 9
# 该值在l中
# 输入你所查找的值:
# 10
# 该值不在l中
# 输入你所查找的值:
# 66
# 该值不在l中
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值