Python基础_函数闭包、调用、递归

时间:2023-03-09 17:25:49
Python基础_函数闭包、调用、递归

  这节的主要内容是函数的几个用法闭包,调用、递归。

一.函数闭包

对闭包更好的理解请看:https://www.cnblogs.com/Lin-Yi/p/7305364.html

我们来看一个简单的例子:

 #闭包  两个函数 嵌套
def Test1():
a=1
print('局部外层:',a)
def test2():
b=2
nonlocal a
a+=1
print('局部里层',a,b)
return test2 #返回函数体 a=Test1()
print(a)

根据上面例子我们可以这样定义闭包:

  在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的函数体,这样就构成了一个闭包。

闭包在装饰器的时候会用到。

二.调用

  调用就是把定义过的函数的函数体当做参数来用。

 def Test1():
a=1
print('局部外层:',a)
def test2():
b=2
nonlocal a
a+=1
print('局部里层',a,b)
return test2 #返回函数体 ##回调函数 两个函数 嵌套
def test3(a):
a() test3(Test1) #Test1函数体

20行中Test1被test3调用,注意是函数体调用。

三.递归

  递归就是函数自己调用自己。

  递归需要注意的地方:

    1.推倒式

    2.终止条件

 #例子1
# 阶乘
def JiChen(n):
if n==1:
return(1)
else:
return(n*JiChen(n-1)) print(JiChen(8))
 #例子2
'''
猴子第一天摘下N个桃子,当时就吃了一半,还不过瘾,就又多吃了一个。第二天又将剩下的桃子吃掉一半,又多吃了一个。
以后每天都吃前一天剩下的一半零一个。
到第10天在想吃的时候就剩一个桃子了,
问第一天共摘下来多少个桃子? '''
# 递归:1.自己调用自己
# 2.写终止条件
# 3.推倒式 def TaoZi(n):
if n==1:
return 1
else:
return(2*(TaoZi(n-1)+1)) ##P1=TaoZi(10)
##print(P1)

补充一点:

  可变的数据类型,可以直接在函数里面进行修改 list set dict

 n=1
li=['a','b','c']
li2=li.copy() #要保留原始数据,需要先复制一份.赋值id变了
di={'name':'方方'}
print(n,li,di)
def test(n,lis,dic):
n+=1
lis.append('haha')
dic['name']='frl'
print(n,lis,dic) test(n,li,di)