zoukankan      html  css  js  c++  java
  • Python21之内嵌函数和闭包

    一、内嵌函数

      内嵌函数指的是在一个函数体内部定义的函数,可以称它为函数的函数,也就是子函数,外部的函数称之为母函数,就类似局部变量和全局变量

    子函数体内定义的变量只在其函数内部有效,但其内部可以调用母函数定义的变量,但无法直接修改母函数体内定义的变量。

    二、闭包

      闭包是一种满足特定要求的内嵌函数(子函数),其外部的函数称为母函数,则当子函数体内有对母函数体内定义的变量的引用时我们称这个子函数为一个闭包

    但当母函数和其闭包都定义了参数时,由于在母函数体外是无法直接对闭包进行函数的调用的,为了能够实现对闭包的调用,需要在母函数内增加一条返回闭包函数名本身的语句,这个时候调用母函数后返回的是一个闭包的函数对象,就可以通过这种方法间接的调用闭包函数

      下诉代码中,我们也可以使用fun1(7)(8)

     1 def fun1(x):
     2     def fun2(y):
     3         return x*y
     4     return fun2
     5 
     6 i = fun1(7)
     7 type(i)
     8 <class 'function'>
     9 i(8)
    10 56
    View Code

    三、在内嵌函数中(子函数)修改外部函数(母函数)的变量的进行修改

      Python3可以实现,多使用一条声明语句:nonlocal                  注意与global语句的区别,global语句是在函数体内修改全局变量的值,

      格式:nonlocal 外部函数的变量名

     1 def mother():
     2     var = 110
     3     print('mother中的var的值为',var)
     4     def son():
     5         nonlocal var
     6         var = 119
     7         print('Son中的var的值为',var)
     8     print('函数中的var的值为',var)
     9     return son
    10 
    11     
    12 >>> mother()()
    13 mother中的var的值为 110
    14 函数中的var的值为 110
    15 Son中的var的值为 119
    16 这时我们打印var的值,其为119,
    17 因为程序的运行过程是,mother运行结束返回son->son运行
    View Code
  • 相关阅读:
    diffstat命令
    v-if与v-show的区别
    常数时间插入、删除和获取随机元素
    diff命令
    C++ bitset的简单使用
    树的直径 | 简答的两道模板题
    Codeforces Round #544 (Div. 3)简单题解
    VIM 入门手册, (VS Code)
    PTA 天梯赛 L3-003 社交集群(并查集)
    L3-002 特殊堆栈 (双数组模拟栈)
  • 原文地址:https://www.cnblogs.com/ksht-wdyx/p/11340412.html
Copyright © 2011-2022 走看看