内部函数

在函数内部定义另一个函数,也就是函数的嵌套

在外部函数的作用域内,外部函数可以随意调用内部函数

由于内部函数的整个定义过程都在外部函数中,所以出了外部函数就无法再被调用了

def outside():
  print('外部函数被调用')
def inside():
    print('内部函数被调用')
  inside()
>>>outside()
外部函数被调用
内部函数被调用
>>>inside()
NameError: name 'inside' is not defined

闭包

如果在一个内部函数里引用了外部函数的变量,此时这个内部函数就被称为闭包

如果不加关键字nonlocal来声明,就会报错,闭包仅发生在嵌套函数中

def outside():
  var=3
  def inside():
    print(var)
    var=5
    print(var)
inside()
>>>outside()
UnboundLocalError: local variable 'var' referenced before assignment
修改:
def outside():
  var=3
  def inside():
    nonlocal var 使用关键字声明
    print(var)
    var=5
    print(var)
  inside()
>>>outside()
3
5

Python笔记(八)_内部函数与闭包的更多相关文章

  1. python 装饰器、内部函数、闭包简单理解

    python内部函数.闭包共同之处在于都是以函数作为参数传递到函数,不同之处在于返回与调用有所区别. 1.python内部函数 python内部函数示例: def test(*args): def a ...

  2. python进阶八_警告和异常

    心情有点纠结,怎么说呢,倒不是由于其它学习上的事情,反而是由于生活上狗血的剧情逼着人偏离,渐行渐远,人跟人之间有误会也是正常的,可能是由于交流不够,彼此不够了解吧,希望能尽快度过这一段纠结的日子,简单 ...

  3. python笔记八(切片)

    一.切片 首先我们要记得在Python中可以用于切片的对象有 列表.元组.字符串. 切片操作就是直接从列表.元组或字符串中,选择出我们想要的内容,这些操作非常简洁实用. >>> L ...

  4. [b0022] python 归纳 (八)_多进程_基本使用

    # -*- coding: UTF-8 -*- """ 测试进程使用 multiprocessing.Process 使用: 1. 准备一个函数<fun>,子 ...

  5. Python笔记(十七)_面向对象编程

    面向对象编程 概念:简称OOP,是一种程序设计思想:OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数 面向对象的设计思想:抽象出类class,根据类class创建实例对象instan ...

  6. Python笔记(六)_函数

    函数一般是从第一行代码开始执行,结束于return语句.异常.或者函数所有语句执行完毕.一旦函数将控制权交还给调用者,就意味着全部结束.函数中做的所有工作以及保存在局部变量中的数据都将丢失.再次调用这 ...

  7. Python笔记(四)_字符串的方法

    字符串的方法 []表示该参数时可选的,start和end参数表示范围 count(sub[, start[, end]]) 返回sub在字符串里边出现的次数 find(sub[, start[, en ...

  8. guxh的python笔记八:特殊方法

     1,类的特殊方法  新建一个类,本章内容中的特殊方法如果不创建类或新增方法,默认使用的就是下面的类: class Foo: """this is Foo"&q ...

  9. Python笔记(十一)_匿名函数与map()、filter()

    匿名函数 无需显式定义函数名,和函数过程,使代码更精简的lambda表达式 函数没有命名,不用担心函数名的冲突 冒号前面代表函数的参数,后面表示计算过程 >>>func=lambda ...

随机推荐

  1. 记录XorDDos木马清理步骤

    1.检查 查看定时任务文件发现有两个异常定时任务 [root@manage ~]# cat /etc/crontab # * * * * * user-name command to be execu ...

  2. HDFS-NameNode和SeconddaryNode

    一.NN和2N的工作机制 一.概述 一.概述 一.概述 一.概述 一.概述 一.概述 一.概述

  3. adb常用命令-android学习第一天

    转载出处:http://www.cnblogs.com/xiaoxuetu/ 转载来源:https://www.cnblogs.com/xiaoxuetu/p/3411214.html 平时开发and ...

  4. Yii框架怎么寻找对应视图

    render()内容; public function render($view,$data=null,$return=false) { if($this->beforeRender($view ...

  5. 关联查询总结,left join 和 inner join 区别和优化

    left join 是做左外关联,主表内容都会显示:符合关联条件的附表内容才会显示出来. inner join 是内关联,没有主表附表的概念:两个表中,同时符合关联条件的数据才会显示出来. left ...

  6. 分布式自增ID算法-Snowflake详解

    1.Snowflake简介 互联网快速发展的今天,分布式应用系统已经见怪不怪,在分布式系统中,我们需要各种各样的ID,既然是ID那么必然是要保证全局唯一,除此之外,不同当业务还需要不同的特性,比如像并 ...

  7. BZOJ-2337 XOR和路径(HNOI2011)概率DP+概率的线性叠加

    题意:给出n个点和m条边,每条边有权值wi,从1出发,每次等概率选一条出边走,直到终点n停止,得到的值是路径所有边的异或和.问异或和期望. 解法:这道题非常有意思!首先比较直观的想法就是dp[x]代表 ...

  8. Linux --忘记root密码/su: Authentication failure

    如果忘记了root用户的密码,或者su root的时候,提示:su: Authentication failure 那么,可以通过以下的方式来重新设置密码,而后,再尝试,那么就可以顺利su root了 ...

  9. Center os6.5 mysql

    1 # yum -y install mysql-server mysql  mysql-dev 2 启动mysql   # service mysqld start 3 为root用户配置一个密码 ...

  10. 插入排序->希尔排序

    /** * 插入排序 */ public class InsertSort { public static void main(String[] args){ int[] arr = {5,5,2,6 ...