当前位置: 首页 > news >正文

【Python基础】名称空间和作用域

1.名称空间

        将栈区进行分类,这些分类就是名称空间

名称空间存放什么名字空间个数何时创建&销毁
内置名称空间built-inPython解释器内置的名字1个Python解释器启动&解释器关闭

全局名称空间

global

Python文件内定义的类名,变量名,模块名,函数名等等,排除函数内部定义&内置的多个Python文件执行前&文件执行完

局部名称空间

local,enclosing

函数内部定义的名字(包含函数的参数)多个函数调用时&调用结束后

2.名称空间的加载顺序

    内置名称空间 >  全局名称空间 > 局部名称空间

3.为什么要有名称空间?

    栈区存在相同变量名的情况下,数据会被覆盖;如果划分空间,就不会产生冲突

4.名称的查找顺序?

  •  整体的名称空间优先级:局部名称空间   >  全局名称空间 >    内置名称空间 > NameError
  •  查找顺序判断:
    • 先判断当前名称是属于哪种名称空间
    • 根据所在名称空间开始查找,如没有则向外找
    • 注意:查找顺序是以定义阶段为基准的
      • 场景1:x = 10def func1():print(x)def func2():x = 20func1()func2()  # 10  在func2内调用func1,func1里面输出x时,func1内部找不到定义的x就去全局空间查找;x=10是先于x=20被定义的场景2:input = 10def func1():def func2():print(input)func2()input = 20func1() # 报错NameError,原因是在func1定义内有局部变量input,所以会优先使用该局部变量,但是执行的时候因为变量定义在func2()后,故调用func2的时候查找不到input而报错

5.作用域

 在名称空间的基础上,按照作用域进行分类: 全局作用域,局部作用域

  • 全局作用域: 
    • 包括:内置名称空间,全局名称空间
    • 特点: 全局存活,全局有效
    • 场景1: 想要函数内部修改全局变量,需要在变量前定义global---针对不可变类型
      (注意:函数内部定义全局变量,就不可再传该参数了)a = 10def func():global aa = 5return afunc()print(a)  # 5
  • 局部作用域:
    • 包括: 局部名称空间
    • 特点:临时存活,局部有效
    • 修改局部变量的值,使用nonlocal,该关键字只会作用在函数内
场景1: 函数内部的局部变量修改,不会影响全局变量a = 10def func(a):a *= 2func(a)print(a) # 10场景2: 针对嵌套函数,想要修改enclosing变量,需要在变量前定义nonlocal----针对不可变类型def func1():x = 10def func2():nonlocal xx = 20func2()print(x)  # 20func1()场景3: 嵌套函数无变量,则报错def func1():def func2():nonlocal xx = 30func2()print(x)func1() # SyntaxError,因为扫描func2定义的时候就去找x所在的空间,func1里面没有则不会再向外去查找,直接报错
http://www.lryc.cn/news/369925.html

相关文章:

  • 安全智能预警软件有人试图窃取会立即发出高分贝警报已解锁VIP功能
  • DeepSORT(目标跟踪算法)中自由度决定卡方分布的形状
  • cordic IP核中,sin and cos的使用
  • SpringSecurity入门(三)
  • luogu-P10570 [JRKSJ R8] 网球
  • ASP.NET的WebService跨域CORS问题解决方案
  • 大众点评全国爱车店铺POI采集177万家-2024年5月底
  • 【文献阅读】LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS
  • Rust学习06:使用CSDN的AI工具“C知道”分析代码错误
  • MeiliSearch-轻量级且美丽的搜索引擎
  • python使用wkhtmltopdf将html字符串保存pdf,解决出现方框的问题
  • Java练习题
  • 【Python/Pytorch - 网络模型】-- 手把手搭建U-Net模型
  • Ansible-doc 命令
  • 面试题:什么是线程的上下文切换?
  • 【简单讲解Perl语言】
  • 专硕初试科目一样,但各专业的复试线差距不小!江南大学计算机考研考情分析!
  • “华为Ascend 910B AI芯片挑战NVIDIA A100:效能比肩,市场角逐加剧“
  • 针对多智能体协作框架的元编程——METAGPT
  • Django自定义CSS
  • Rust基础学习-标准库
  • django连接达梦数据库
  • Python深度学习基于Tensorflow(17)基于Transformer的图像处理实例VIT和Swin-T
  • 树莓派4B_OpenCv学习笔记5:读取窗口鼠标状态坐标_TrackBar滑动条控件的使用
  • c、c#、c++嵌入式比较?
  • 如何使用ai人工智能作诗?7个软件帮你快速作诗
  • 调用华为API实现语音合成
  • docker实战命令大全
  • Java线程死锁
  • virtual box安装invalid installation directory