Python中的作用域==和is的区别及说明

 更新时间:2024年01月20日 09:20:17   作者:夜阑卧听风吹雨,铁马冰河入梦来  
这篇文章主要介绍了Python中的作用域==和is的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

作用域

LEGB规则:

locals -> enclosing function -> globals -> builtins,依次是局部作用域---->嵌套作用域————>全局作用域——>内建作用域

globals()和locals()函数可以获取当前的全局和局部作用域的所有变量

在Python中并不是所有的语句块中都会产生作用域。

只有当变量在Module(模块)、Class(类)、def(函数)中定义的时候,才会有作用域的概念。

需要注意的是:

if-elif-else、for-else、while、try-except\try-finally等关键字的语句块中并不会产成作用域。

if True:
    a = 100
print(a)           -----100

L(local)局部作用域

局部变量:

包含在def关键字定义的语句块中,即在函数中定义的变量。

每当函数被调用时都会创建一个新的局部作用域。

需要在函数内部定义全局变量,这时可以使用global关键字来声明变量的作用域为全局。

局部变量仅暂时存在,依赖创建该局部作用域的函数是否处于活动的状态。

E(enclosing)嵌套作用域

E也包含在def关键字中,E和L是相对的,E相对于更上层的函数而言也是L。

与L的区别在于,对一个函数而言,L是定义在此函数内部的局部作用域,而E是定义在此函数的上一层父级函数的局部作用域。

主要是为了实现Python的闭包,而增加的实现。

G(global)全局作用域

即在模块层次中定义的变量,每一个模块都是一个全局作用域。

也就是说,在模块文件顶层声明的变量具有全局作用域,从外部开来,模块的全局变量就是一个模块对象的属性。

注意:

全局作用域的作用范围仅限于单个模块文件内

B(built-in)内置作用域

系统内固定模块里定义的变量,如预定义在builtin 模块内的变量。

variable = 300
def test_scopt():
  print (variable)          #variable是test_scopt()的局部变量,但是在打印时并没有绑定内存对象。
  variable = 200            #因为这里,所以variable就变为了局部变量
test_scopt()
print (variable)

上述例子会报UnboundLocalError,因为在执行程序时的预编译能够在test_scopt()中找到局部变量variable(对variable进行了赋值)。

在局部作用域找到了变量名,所以不会升级到嵌套作用域去寻找。

但是在使用print语句将变量variable打印时,局部变量variable并有没绑定到一个内存对象(没有定义和初始化,即没有赋值)

本质上还是Python调用变量时遵循的LEGB法则和Python解析器的编译原理,决定了这个错误的发生。

所以,在调用一个变量之前,需要为该变量赋值(绑定一个内存对象)

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python实现中文文本关键词抽取的三种方法

    Python实现中文文本关键词抽取的三种方法

    文本关键词抽取,是对文本信息进行高度凝练的一种有效手段,通过3-5个词语准确概括文本的主题,帮助读者快速理解文本信息,本文分别采用TF-IDF方法、TextRank方法和Word2Vec词聚类方法,利用Python语言进行开发,实现文本关键词的抽取,需要的朋友可以参考下
    2024-01-01
  • Windows下python3安装tkinter的问题及解决方法

    Windows下python3安装tkinter的问题及解决方法

    这篇文章主要介绍了Windows下python3安装tkinter问题及解决方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • Python-pip配置国内镜像源快速下载包的方法详解

    Python-pip配置国内镜像源快速下载包的方法详解

    pip如果不配置国内镜像源的话,下载包的速度非常慢,毕竟默认的源在国外呢,这篇文章主要介绍了Python-pip配置国内镜像源快速下载包的方法详解,需要的朋友可以参考下
    2024-01-01
  • pandas中ix的使用详细讲解

    pandas中ix的使用详细讲解

    这篇文章主要介绍了pandas中ix的使用详细讲解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Python基于DFA算法实现内容敏感词过滤

    Python基于DFA算法实现内容敏感词过滤

    DFA 算法是通过提前构造出一个 树状查找结构,之后根据输入在该树状结构中就可以进行非常高效的查找。本文将利用改算法实现敏感词过滤,需要的可以参考一下
    2022-04-04
  • 解决Tensorflow占用GPU显存问题

    解决Tensorflow占用GPU显存问题

    今天小编就为大家分享一篇解决Tensorflow占用GPU显存问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • Python实现爬取百度贴吧帖子所有楼层图片的爬虫示例

    Python实现爬取百度贴吧帖子所有楼层图片的爬虫示例

    这篇文章主要介绍了Python实现爬取百度贴吧帖子所有楼层图片的爬虫,涉及基于urllib的网页访问与正则匹配相关操作技巧,需要的朋友可以参考下
    2018-04-04
  • python实现通过队列完成进程间的多任务功能示例

    python实现通过队列完成进程间的多任务功能示例

    这篇文章主要介绍了python实现通过队列完成进程间的多任务功能,结合实例形式分析了Python队列完成进程间的多任务以及进程池pool相关操作技巧,需要的朋友可以参考下
    2019-10-10
  • Python多进程fork()函数详解

    Python多进程fork()函数详解

    今天小编就为大家分享一篇关于Python多进程fork()函数详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • Python开发网站目录扫描器的实现

    Python开发网站目录扫描器的实现

    这篇文章主要介绍了Python开发网站目录扫描器的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-02-02

最新评论