16函数---嵌套、作用域、global、nonlocal
1、函数嵌套
def f1(): def f2(): def f3(): print('cc') f3() f2() f1()
2、作用域
python创建、改变或查找变量名都是在所谓的命名空间中进行的,
当我们谈论搜索变量名对应代码的值时,作用域这个术语指的就是命名空间。
作用域和定义的时候有关系,和在哪里调用没有关系
变量名解析:LEGB规则
L:Local,本地作用域,函数定义了本地作用域,即函数内的名字空间
E:Enclosing function locals,外部嵌套函数的名字空间(例如closure),或lambda的本地作用域
G:Global(module),全局作用域,所在模块(文件)的名字空间
B:Built-in,内置模块的名字空间
3、glocal语句:
如果局部要对全局变量修改,则在局部声明该全局变量
如果局部不修改全局变量,只是引用,则不用声明
如果有多处
a= 1 def f(): #如果需要在函数内定义(修改)全局变量,则要先用global进行声明,直接 a += 1 会报错,如果只是引用的话,则不用global声明 # 如果修改的是不可变类型,那么必须global声明,如果修改的是可变类型,那么不用声明,修改会直接返回到原值 global a a += 1 #如果只是查看的话,则不用global声明, print(a) f()
如果修改的是可变类型,那么不用声明,修改会直接返回到原值
l = [1,2] def f(l): l.append(3)#这是修改的是可变类型,不用golbal声明 return l print(f(l))
4、nonlocal语句
nonlocal : 用来在函数或其他作用域中使用外层(非全局)变量
对于多层嵌套函数,使用nonlocal声明,会从当前函数层的外层开始寻找,一直到最外层,不会找到全局变量
x = 2 def f1(): x = 3 def f2(): x = 4 def f3(): nonlocal x # 去当前层的上一层去找, x += 1 f3() print(x) # 5 f2() print(x) # 3 f1() print(x)#全局变量不会被修改, 2
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
2020-04-03 02python基础----控制流程