首页 > 编程语言 >一文读懂Python中的全局变量局部变量和作用域

一文读懂Python中的全局变量局部变量和作用域

时间:2023-09-27 11:34:45浏览次数:42  
标签:变量 作用域 局部变量 Python 实例 全局变量 函数


局部变量和全局变量是面试热点

通常小白在写代码时,只知道引用变量来应对一些基础的编码问题,当面试官问及局部变量和全局变量的具体细节时,就会一脸懵逼,傻傻分不清楚!其实想要彻底了解局部变量和全局变量的关系,本质是大家需要明白何为作用域!这篇文章会带大家彻底搞懂这三者之的唇齿相依的关联!Python中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。Python的作用域一共有4种,分别是:

L(Local):最内层,包含局部变量,比如一个函数/方法内部。

E(Enclosing):包含了非局部也非全局的变量。比如两个嵌套函数,一个函数(或类) A 里面又包含了一个函数 B ,那么对于 B 中的名称来说 A 中的作用域就为非局部。

G(Global):当前脚本的最外层,比如当前模块的全局变量。

B(Built-in): 包含了内建的变量/关键字等。,最后被搜索。

 

一文读懂Python中的全局变量局部变量和作用域_面试

Python中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域。

局部作用域与全局作用域

定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。例如:

 

一文读懂Python中的全局变量局部变量和作用域_局部变量_02

内建作用域

我们在模块中的任意位置都可以使用内置变量,例如:

 

一文读懂Python中的全局变量局部变量和作用域_作用域_03

类的作用域

类分为类变量和实例变量,类变量定义在方法外,实例变量定义在方法内。类变量和实例变量的作用域解释说明如下图:

 

一文读懂Python中的全局变量局部变量和作用域_类变量_04

类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;而实例变量则属于对象私有,某一个对象将其值改变,不影响其他对象。如下图所示:

 

一文读懂Python中的全局变量局部变量和作用域_作用域_05

 

执行代码,运行结果如下:

 

一文读懂Python中的全局变量局部变量和作用域_面试_06

可以看到代码中 B.c_b=456 影响了实例b2中的类变量结果(从123变为456);而在init方法中,最后一句self.my_var=1 目的是对实例方法进行重新赋值,但是他并未影响b2中my_var的输出(还是0)原创不易,如果文章帮到了你,欢迎转发,让更多的朋友受益!

标签:变量,作用域,局部变量,Python,实例,全局变量,函数
From: https://blog.51cto.com/liwen629/7622000

相关文章

  • Python 练习实例5
    目:输入三个整数x,y,z,请把这三个数由小到大输出。程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。程序源代码:实例(Python2.0+)#!/usr/bin/python#-*-coding:UTF-8-*-l=[]......
  • Python 练习实例6
    题目:斐波那契数列。程序分析:斐波那契数列(Fibonaccisequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……。在数学上,费波那契数列是以递归的方法来定义:F0=0(n=0)F1=1(n=1)Fn=F[n-1]+F[n-2](n=>2)程序源代码:方法一#!/usr/bin/python......
  • python numpy所有的数据类型 查看 np.sctypeDict
    >>>np.sctypeDict{'?':<class'numpy.bool_'>,0:<class'numpy.bool_'>,'byte':<class'numpy.int8'>,'b':<class'numpy.int8'>,1:<class'num......
  • Python中的函数注释:参数有冒号,声明后有-> 箭头
    我在查看python的fixture源码时发现fixture的方法定义形式如下:deffixture(fixture_function:Optional[_FixtureFunction]=None,*,scope:"Union[_Scope,Callable[[str,Config],_Scope]]"="function",params:Optional[Iterable[object]]......
  • 接口测试系列文章3——Python接口测试其实只需三步!
    接口测试通用步骤小品中曾说过,大象放冰箱里分三步!分别是:一、把冰箱门打开二、把大象放到冰箱里三、把门关上那么问题来了!通过代码做接口测试分几步呢?答:也分三步!其实无论是手工进行接口测试还是通过代码进行接口测试,三个核心步骤如下:构建接口发送接口校验接口Python编码进行......
  • 进阶Python,从编写Python函数开始!
    好多同学都有这样的疑惑,我学习了python的基础语法,那么具体应用该从哪里入手呢?首先大家要确定,代码必须用起来才能越来越熟练!读懂十行代码不如自己亲自上手遍写一行!代码想熟练最好的方法就是能够通过代码解决工作中的实际问题,例如完成UI自动化测试、接口测试、创建测试数据、构建测试......
  • 测试同学必须熟悉的python模块
    测试同学在进行python的面试过程中,必问的问题是你最常用的python模块有哪些?这些模块解决了你工作中的哪些问题?在这里我把测试同学在实际工作中常用的py模块进行了汇总,本文编写的目的是对各个模块的功能进行概要介绍并没有提供具体api的使用方法,如果大家想要深入了解各个模块api的具......
  • Python高频面试题——装饰器(带大家理解装饰器的本质)
    装饰器概念装饰器本质上是一个python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限验证等场景,装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可......
  • Python高频面试题——生成器(最通俗的讲解)
    生成器定义在Python中,使用了yield的函数被称为生成器(generator)。跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。在调用生成器运行的过程中,每次遇到yield时函数会暂停并保存当前所有的运行信息,返回yield的值,并在......
  • playwright python环境运行报错 ImportError: DLL load failed
    网上建议网上好多文章介绍playwright的环境搭建,用以下两条语句即可完成pipinstallplaywrightplaywrightinstall安装完毕后,尝试执行一段经典的pythondemofromplaywright.sync_apiimportsync_playwrightwithsync_playwright()asp:browser=p.chromium.launch()page......