伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 互联网资讯 » 文章详细 订阅RssFeed

Python中令人头疼的变量作用域问题,终于弄清楚了

来源:本站原创 浏览:122次 时间:2021-08-06

邯郸人才招聘网有职,骨煞,itunes固件下载位置

  本原:Python内容之道

  作者:大奎

  整理:阳哥

  人人好,我是阳哥。

  学习Python变量过程中,曾经为变量杂沓的作用域问题头疼不已,全局变量、局部变量、自由变量傻傻分不清,本日来跟人人分享 Python变量作用域 的知识点,文章数据由公众号读者 大奎 创作。

  我们常常据说Python函数访问局部变量、全局变量;在界说装饰器的时候,还会使用自由变量。这些分歧的变量是如何赋值、初始化、查找及修改的呢?各自的作用细则又是什么样的呢?本篇尝试解答这个问题。

  Python中的变量名能够指代变量、函数、类、对象等。一般来说,每个对象都有一个变量名指向,更准确说是 绑定。

  作用域的需要性

  为啥变量要有作用域呢?

  我们在Python里遇到的内置、局部、全局及自由变量,便是说变量的作用域。

  语言区分作用域,是为了复用变量名。引入作用域,相当于给变量划分了各自的“隔离区”,在分歧”隔离区“里,查找变量变得很容易。

  正是因为有了作用域,我们在函数内才能够随意使用变量名,而不担心其与全局变量、其他函数中的变量冲突——因为这两个作用域是分割的。

  BASIC语言只有全局变量,你能想象吗?你在一个函数里命名的循环变量i,很可能跟全局变量冲突。写起法式来,举步维艰。且会导致很多修改、检索问题,维护很难题。

Python变量界说的时间和空间

  Python 有哪些作用域呢?

  Python是动态类型语言,变量是在界说的时候赋值的。这句话的意思我们分以下几个方面来懂得:

  a = 1 赋值时界说变量from tools import cubie 导入时界说变量 cubiedef fun():pass 界说函数,绑定变量fundef fun(name=None):pass 界说变量name为函数fun的形式变量(也是局部变量),同时界说函数,绑定便令funclass Car:pass 界说类,绑定类名Car

  以上,我们弄清了变量界说的时刻,下面来看变量的作用域,也便是变量的运动空间怎么划定出来的。

  变量作用域取决于其 界说位置。

  界说在函数内部的变量、界说在函数声明中的形式参数,视为局部变量。界说在 .py 文件内的,且函数、类之外的变量,视为全局变量。界说在函数中,嵌套函数外,且被嵌套函数引用的变量,视为自由变量。界说在builtin中的变量,视为内置变量。

  面对如此复杂的四种变量作用域,用一个例子来阐明它们的访问规则。

  LEGB规则

  四个作用域遵循LEGB规则,让我们用一个例子来阐明。

  import builtinsbuiltins.b = 'builtins'g = 'global'def outer(o1,o2='o2'): e = 'enclose' def inner(i1,i2='i2'): print(i1,i2,o1,o2,e,g,b) return inner fun = outer('o1') fun('i1')

  其输出为 i1 i2 o1 o2 enclose global builtins

  可见,在outer函数的嵌套函数inner中的输出语句 print(i1,i2,o1,o2,e,g,b) 是本法式的重点。其具体执行环境如下:

  print i1和i2,毫无疑问的局部变量。print o1和o2,内陆作用域没有,向上查找到outer函数形参。形参也为局部变量,所以该变量现实界说在outer函数内,inner这个内嵌函数外,而inner内部引用了这个变量,所以视为自由变量。print e,内陆作用域没有,类似上例,视为自由变量。print g,内陆作用域没有,自由变量作用域(闭包)没有,一直上溯到全局作用局找到。print b,内陆作用域没有,自由变量作用域(闭包)没有,全局作用局没有,同等上溯到内置变量空间找到。

本文地址:http://www.wbwb.net/bianchengyuyan/212574.html 转载请注明出处!

  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net