首页 > 其他分享 >作用域

作用域

时间:2024-05-17 08:59:52浏览次数:9  
标签:作用域 global inner func print def

作用域

【一】什么是作用域

  • 变量的作用域
  • Python是静态作用域,变量的作用域源于它在代码中的位置
  • 在不同的位置,可能有不同的命名空间,命名空间是变量作用域的体现形式

【二】一个例子

  • 整个电脑系统,硬盘和系统 --->前人约定俗成
  • 名称空间 --->内建 局部 全局
  • 存放变量名和变量关系的地方 --->内存中/硬盘中

【三】四种作用域

【1】内置作用域

Python解释器自带的作用域

【2】全局作用域

全局名称空间

【3】局部作用域

在函数内部或者是类内部的名称空间

a = 1
def func():
    b = 2
    print(a)
    print(b)
print(a)

print(b) # 报错,全局作用域不能使用局部作用域中的变量
    

【4】嵌套作用域

在函数内部的函数的名称空间

def outer():
    def inner():
        ...
    ...
在inner()里面的作用域就是嵌套作用域
a = 1
def func():
    b = 2
    def inner():
        c=3
        print(c)
        print(a)
        print(b)
    print(c)# 报错
print(c) # 报错
print(a)
print(b) # 报错
在局部修改全局变量
使用 global 在局部将局部变量的等级提升为全局
# 一般用在不可变数据类型上
a = 1
def func():
    global a
    a = '2'
    print(a)
func()
print(a)

局部变量等级提升后		提升前
2						2
2						1

【5】在内嵌函数中修改外部函数的变量

内嵌函数中修改外部函数的变量值不能使用global

使用nonlocal 来提升内嵌函数的变量的等级到外部

a = 1
def func():
    global a
    a = 2
    b = 3
    def inner():
        global b
        b = 4
        print(b)
    inner()
    print(b)

func()
inner()中的b  提升前  	提升后
			  4          4
			  3          3
global b 没有提升成功

使用nonlocal
将 global b 改为 nonlocal b
			  提升前  	提升后
			  4          4
			  3          4

【6】LEGB规则

(1)作用域的加载顺序

  • B:built-in 内置变量
  • G:global 全局变量
  • L: locals() 局部变量
  • E:enclose function locals 内嵌变量

(2)作用域的查找顺序

  • 如果在全局
    • 全局 --> 内建
  • 如果在局部
    • 局部 -- >全局 --> 内建

标签:作用域,global,inner,func,print,def
From: https://www.cnblogs.com/yi416/p/18197120

相关文章

  • Bean的作用域和自动装配
    SpringBean的作用域主要有五种Singleton是单例类型,就是在创建起容器时就同时自动创建了一个bean的对象,不管你是否使用,他都存在了,每次获取到的对象都是同一个对象。注意,singleton作用域是Spring中的缺省作用域(默认的作用域)。prototype是原型类型,它在我们创建容器的时候并没......
  • sqlSession相关的作用域和生命周期
    生命周期和作用域是十分重要的,错误的使用会导致非常严重的并发问题。Mybatis的执行流程详细讲解SqlSessionFactoryBuilder:一旦创建了SqlSessionFactory,就不需要它了,比较适合在局部变量中创建。SqlSessionFactory:相当于数据库的连接池;SqlSessionFactory一旦被创建就应......
  • Python高级之名称空间和作用域
    【一】名称空间【1】什么是名称空间名称空间就是存放函数名与函数值对应关系的地方内存空间就是申请一块内存空间,然后将函数值放到内存空间里再将变量名和变量值绑定存到名称空间里程序执行期间最多会存在三种名称空间【2】内置名称空间会跟着python解释器的启动而生成,......
  • javaScript之局部变量,全局变量与局部作用域,全局作用域
    前端开发工作者,最需要学习的一门语言就是JavaScript了吧,其实学习大部分编程语言都是从基本的语法知识开始人门的。什么语句、变量、数据类型、对象、函数...今天本文就简单说明javaScript变量中的一个小小的知识点,其实在后面的最开始工作编程中我也是常常容易出现bug的一个点。......
  • 从自定义一个作用域开始来了解SpringBean的作用域
    你好,这里是codetrend专栏“Spring6全攻略”。在Spring框架中,Bean的作用域(Scope)定义了Bean实例在容器中如何创建、管理和销毁的策略。Spring提供了多种Bean作用域,每种作用域都有其特定的生命周期和适用场景。先试试不同的BeanScope下面通过一个简单的SpringMVCCon......
  • Spirng 当中 Bean的作用域
    Spirng当中Bean的作用域@目录Spirng当中Bean的作用域每博一文案1.Spring6当中的Bean的作用域1.2singleton默认1.3prototype1.4Spring中的bean标签当中scope=属性其他的值说明1.5自定义作用域,一个线程一个Bean2.总结:3.最后:每博一文案青年,青年!无论受怎样的......
  • 深入解析JavaScript的块级作用域和for循环的性能考量
    "当然,以下是一篇关于JavaScript中块级作用域和循环的深入分析的博客文章草稿:深入解析JavaScript的块级作用域和for循环的性能考量块级作用域的基本理解在JavaScript中,块级作用域是由大括号{}定义的作用域,限定了变量的可见性和生命周期。通常情况下,如if、try...catch以及with等......
  • Python 函数和变量作用域
    变量引用顺序Python引用变量的顺序:当前作用域局部变量->外层作用域变量->当前模块中的全局变量->Python内置变量。1、globalglobal关键字用来在函数或其他局部作用域中使用全局变量,如果不对全局变量进行修改,那么可以不使用global关键字;如果想要在函数或局部作用域中对全局变......
  • JMeter组件的执行顺序和作用域
    组件介绍测试计划:jmeter的起点和容器线程组:代表一定的虚拟用户取样器:发送请求的最小单元逻辑控制器:控制组件的执行顺序前置处理器:在请求之前的操作后置处理器:在请求之后的操作断言:判断请求是否符合预期定时器:是否延迟或间隔发送请求配置元件:请求期的配置信息监听器:负责......
  • 名称空间与作用域
    【一】名称空间【1】什么是名称空间名称空间就是存放函数名与函数值对应关系的地方变量名=变量值用变量名和变量值进行绑定--->名称空间名称空间即存放名字与对象映射/绑定关系的地方【2】名称空间[1]内建名称空间在Python解释器中自带的名称空间会随着代码启动而生......