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

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

嵌套函数

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

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层打印 孙悟空1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

匿名函数

匿名函数就是不需要显式的指定函数名,匿名函数需要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)

#运行结果

#

# 1

# 4

# 9

# 16

# 36

# 81

# 10

# 151

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

高阶函数

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

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)

#执行结果

#51

2

3

4

5

6

7

8

9

10

11

函数的递归

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

递归特性:

1.必须有一个明确的结束条件

2.每次进入更深一层递归时,问题规模相比上次递归都应有所减少

3.递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

用递归实现2分查找的算法

while True:

res=False

def erfenfa(a,b,x,l):

k=int((a+b)/2)

if a

if x==l[k]:

global res

res=True

elif x

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中1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值