zoukankan      html  css  js  c++  java
  • Python第十一天

    闭包

    直接理解闭包,有点绕,所以我们逐步理解

    1. 函数嵌套

      一个函数里面, 定义了另一个函数.

    外面的函数叫 外部函数, 里面定义的函数叫内部函数,  可以说外部函数 是内部函数的父 函数,

    内部函数 是 外部函数的子函数.

     注意, 内部函数中,可能还有它的内部函数, 注意层级关系

             另外,同样的内部函数,可以定义多个.

    1 def outer():
    2     def inner():
    3         print('内部函数执行')
    4         return 
    5     #在外部函数中,执行内部函数
    6     inner()
    7     print('外部函数执行')
    8     return 

      没有返回值,可以不写return, 写return 是为了更醒目知道, 函数结束的位置

    当在程序主体 执行 outer() 时, 就会开始执行 outer函数, outer函数内部就会执行 内部函数inner

    2. 内部函数,可以直接引用 外部函数的局部变量

     1 def outer():
     2     x = 10
     3     def inner():
     4         print('inner', x)
     5         print('内部函数执行')
     6         return
     7     #在外部函数中,执行内部函数
     8     inner()
     9     print('外部函数执行')
    10     print('outer', x)
    11     return
    12 
    13 outer()  执行外部函数

    3. 外部函数的返回值, 返回内部函数名

     1 def outer():
     2     x = 10
     3     def inner():
     4         print('inner', x)
     5         print('内部函数执行')
     6         return
     7     #在外部函数中,执行内部函数
     8     inner()
     9     print('外部函数执行')
    10     print('outer', x)
    11     return inner
    12 
    13 f1 = outer()
    14 print('利用外部函数返回的内部函数名,执行内部函数')
    15 f1()

    执行结果如下:

    1 inner 10
    2 内部函数执行
    3 外部函数执行
    4 outer 10
    5 利用外部函数返回的内部函数名,执行内部函数
    6 inner 10
    7 内部函数执行

    按如上, 1, 2, 3, 三部贯通下来, 

    inner 这个内部函数, 就是闭包函数.

     当然,在外部函数outer内部, 也可以不调用 内部函数 inner

  • 相关阅读:
    Java实现 LeetCode 400 第N个数字
    Java实现 LeetCode 400 第N个数字
    Java实现 LeetCode 399 除法求值
    Java实现 LeetCode 399 除法求值
    Java实现 LeetCode 399 除法求值
    Java实现 LeetCode 398 随机数索引
    Java实现 LeetCode 398 随机数索引
    Java实现 LeetCode 398 随机数索引
    linux中的cd ..和cd -命令有什么区别?
    GCC使用
  • 原文地址:https://www.cnblogs.com/golzn2018/p/9506959.html
Copyright © 2011-2022 走看看