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

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

一.函数闭包

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

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

 1 #闭包  两个函数 嵌套
 2 def Test1():
 3     a=1
 4     print('局部外层:',a)
 5     def test2():
 6         b=2
 7         nonlocal a 
 8         a+=1
 9         print('局部里层',a,b)
10     return test2  #返回函数体
11 
12 a=Test1()
13 print(a)

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

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

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

二.调用

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

 1 def Test1():
 2     a=1
 3     print('局部外层:',a)
 4     def test2():
 5         b=2
 6         nonlocal a 
 7         a+=1
 8         print('局部里层',a,b)
 9     return test2  #返回函数体
10 
14 
15 
16 ##回调函数  两个函数 嵌套
17 def test3(a):
18     a()
19 
20 test3(Test1)  #Test1函数体

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

三.递归

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

  递归需要注意的地方:

    1.推倒式

    2.终止条件

 1 #例子1
 2 # 阶乘
 3 def JiChen(n):
 4     if n==1:
 5         return(1)
 6     else:
 7         return(n*JiChen(n-1))
 8 
 9 
10 print(JiChen(8))

 

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

 

补充一点:

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

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

 

posted on 2018-03-08 22:31  方方31140519  阅读(203)  评论(0编辑  收藏  举报

导航