zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    服务器切换
    闭包函数
    函数对象+嵌套
    lvs讲解
    了解python
    rang enumerate
    set-集合功能介绍
    元组-tuple功能介绍
    dict-字典功能介绍
    list-列表功能介绍
  • 原文地址:https://www.cnblogs.com/fangfang31140519/p/8531280.html
Copyright © 2011-2022 走看看