在看之前先把这篇文章的global搞懂

Python入门--python中的global_愈努力俞幸运的博客-CSDN博客_python的globalhttps://blog.csdn.net/qq_37891604/article/details/124203862

先复习一下嵌套函数

内部函数,是无法被直接调用的,内部函数只能通过外部函数来调用

'''
嵌套函数
'''
#例1
def funA():x=520def funB():x=880print('in funB x=',x)funB()#内部函数只能通过外部函数来调用print('in funA x=',x)
'''
内部函数是无法被直接调用的
内部函数只能通过外部函数来调用
'''
'''
以下语句会报错
funB()
'''
funA()#in funB x= 880 in funA x= 520

首先对输出的结果要会判断,不会就是还没理解python作用域。

内部函数可以访问到外部函数的变量,但却无法修改外部函数变量的值,外部函数输出的x还是520.

例1中,内部函数外部函数,虽然都是x,但内部函数无法修改外部函数的值。

和global的例1是一样的感觉

使用nonlocal语句,在内部函数修改外部函数的变量

#例2
'''
使用nonlocal语句,在内部函数修改外部函数的变量
'''
def funA():x=520def funB():nonlocal xx=880print('in funB x=',x)funB()#内部函数只能通过外部函数来调用print('in funA x=',x)
funA()#in funB x= 880 in funA x= 880

判断例3的代码是否会报错?

#例3
def funa():x=5def funb():x+=1print(x)funb()print(x)
funa()
'''
UnboundLocalError: local variable 'x' referenced before assignment'''

例1,会报错,出错原因就是global,一样,虽然在外部函数找到了x,但当对x进行修改时,会把x当成局部变量,但在funb中没定义x,所以会出错。

在global那边文章中,我们说可以加global.在嵌套函数中可以使用nonlocal

#例4
def funa():x=5def funb():nonlocal xx+=1print(x)funb()print(x)
funa()

有个神奇的是

#例5
def funa():lst=[1,2]se={10,20}def funb():lst.append(3)print('内部函数中lst',lst)se.add(30)print('内部函数中se',se)funb()print('外部函数中lst',lst)print('外部函数中se',se)
funa()
'''
内部函数中lst [1, 2, 3]
内部函数中se {10, 20, 30}
外部函数中lst [1, 2, 3]
外部函数中se {10, 20, 30}
'''

这没加nonlocal,这怎么可以修改外部函数的变量呢?这是因为列表,集合是容器变量,可以修改。

最后给出个两个代码,检验各位看官是否理解。

#例6
# 定义一个外部函数outer
def outer():x = 2# 定义一个内部函数innerdef inner():# 在内部函数如何修改外部函数的局部变量nonlocal x # 此时这里的x不再是新增的变量,而是外部的局部变量xy = x + 1print('y为',y)x = 10 print('内部函数里的x等于',x)inner()print('外部函数里的x等于',x)
outer()
'''
y为 3
内部函数里的x等于 10
外部函数里的x等于 10
'''

最后,总结

python 里内嵌函数是可以修改外部环境里的变量的

关键是细节. 如果是简单变量类型, 那么不可以.如果相修改就是用nonlocal

但是如果是容器类变量, 则没问题了.

呕心沥血之作,希望有同样疑问的朋友,可以因为本篇节省点精力。

最后给个例子巩固。

#例7
# 定义一个外部函数outer
def outer():a=11b=22x=[1,2,3]def inner():global c#如果想把内部变量传递到外部环境里,就必须在内部环境里声明为全局变量c=a+b#b=b+1#内部函数不能修改,简单型外部变量x.append([4,5,6])print('内部函数',a,b,c)print('内部函数',x)inner()print('外部函数',a,b,c)print('外部函数',x)
outer()
'''
内部函数 11 22 33
内部函数 [1, 2, 3, [4, 5, 6]]
外部函数 11 22 33
外部函数 [1, 2, 3, [4, 5, 6]]
'''

python-嵌套函数讲解相关推荐

  1. Python 嵌套函数

    简述 在 Python 中,函数的用法可谓是千变万化,只不过我们平日接触的大多是一些基本用法.函数强大之处当然不止于此,它还有很多高级用法 - 闭包.装饰器... 这些高级用法都与嵌套函数紧密相关,所 ...

  2. python嵌套函数具体案例_python编程嵌套函数实例代码

    python,函数嵌套,到底是个什么东东? 很少有人用,但是,有时确实会用: def multiplier(factor): def multiplyByFactor(number): return ...

  3. python 嵌套函数及其练习题

    嵌套函数 文章目录 嵌套函数 嵌套函数的定义: 函数之间的调用 练习 练习一 2,练习二 练习三 练习四 嵌套函数的定义: 函数嵌套就是在函数内部定义子函数. 例如: def go():print(& ...

  4. python 嵌套函数过多_嵌套函数的性能开销是多少?

    性能惩罚肯定存在.如果函数是在对另一个函数的调用中创建的,那么每次调用外部函数时都会创建函数对象.但这种惩罚很小,而且通常可以忽略不计.尤其要考虑到一个显而易见的事实:在大多数情况下,只有当嵌套函数不 ...

  5. 微课--Python嵌套函数定义与使用

    全国高校教师Python课程高级研修班(线上,11月20-21日) 中国大学MOOC"Python程序设计基础"第5次开课 推荐教材:Python程序设计入门与实践 I  S  B ...

  6. Python len()函数讲解

    如果我们想要知道一段字符串里有多少个字符,或者它站多少个字节,我们该怎么去获取? 带着这个问题我们来学习今天讲解的函数,len()函数,在Python中我们可以通过len()函数去解决上面的问题 le ...

  7. 【Python】Python之函数讲解

    ◆ ◆ ◆  ◆ ◆ 函数 所谓函数,就是一段可以实现某种功能的代码,基本作用有两个. 其一:当某些指令被重复书写在许多不同的地方. 如果我们能把这些重复的指令写成一个函数,需要时再调用它,这样,不仅 ...

  8. python popen函数讲解_Python常用模块函数代码汇总解析

    一.文件和目录操作 创建.删除.修改.拼接.获取当前目录.遍历目录下的文件.获取文件大小.修改日期.判断文件是否存在等.略 二.日期和时间(内置模块:time.datatime.calendar) 1 ...

  9. python set()函数讲解

    set   是一个不允许内容重复的组合,而且set里的内容位置是随意的,所以不能用索引列出.可进行关系测试,删除重复数据,还可以计算交集.差集.并集等. 1.创建set集合 >>> ...

  10. python 匿名函数讲解

    匿名函数就是没有实际名称的函数.其主体仅仅是一个表达式,而不需要使用代码块. <函数对象名> = lambda   <形式参数列表>:<表达式> 例如: def a ...

最新文章

  1. 图形驱动程序和显卡驱动什么区别_专业图形显卡和游戏显卡的区别以及建模和渲染的性能要求...
  2. java、intellij idea、groovy
  3. 【NLP】全方位解读 | Facebook的搜索是怎么做的?
  4. 读书笔记_探索式测试_混合探索式测试
  5. PHP允许输入负数,php exec在linux中返回值不能为负数
  6. 以Python为例对变量类型及运算符进行举例
  7. MVC3 Razor语法速查
  8. PHP帮管客CRM系统源码去域名授权v2.4.4版
  9. 人脸关键点定位:300W数据集
  10. 微软官方Windows2003原版下载
  11. 无名小站超雅虎奇摩成台湾第一大网站
  12. 计算机excel保留一位小数,excel表格数据取一位小数-excel保留一位小数
  13. pyinstaller打包程序带图片终极教程
  14. 关于“嵌入式系统设计师”的了结。
  15. MySQL字符串数据类型
  16. Programming Ruby 读书笔记(六)
  17. matlab均衡的算法有哪些,从Matlab到Python的算法均衡
  18. centos7 安装 nextcloud 教程
  19. 一些根本不用数据结构的题。。(积木大赛、焚风现象)
  20. 相关性系数替代模型预测得分

热门文章

  1. enable_if 的一个奇怪用法
  2. 人工智能的黎明:混战中的语音识别
  3. 笔记本开机后闪一下就关机了
  4. 面试官说和人事_做,说和(不是)成为互联网名人
  5. Python-PyQt5 图形库系列教程 | 简介与HelloWord!
  6. 赛宁首创革新赛制助力人才培养 | 第十六届全国大学生信息安全竞赛-创新实践能力赛全面启动!
  7. Oracle中ROW_NUMBER() OVER()函数用法
  8. HTML怎么使盒子中的盒子置右/左
  9. 腾讯云服务器Intel Xeon Cascade Lake 8255C处理器CPU性能评测
  10. 求助帖:用R语言lmer做多层线性模型HML,请问变量之间的关系如图所示应该怎么用语句呢?