百科狗-知识改变命运!
--

python变量与作用域

百变鹏仔1年前 (2023-11-21)阅读数 26#技术干货
文章标签变量

1.变量的概念

变量由两部分组成:变量名和变量值。变量值是存放在内存中的,变量的数据类型决定了其值在内存中的存放方式;变量名只是一个指向变量值所在内存空间地址的引用而已。

python中的变量回收机制:

变量的值存放在内存空间中

内存空间是有地址的(门牌号)

变量名是对其变量值所在内存空间地址的引用

Python解释器对内存地址引用次数是有记数的

Python解释器会定期将引用次数为0的内存地址清空--释放

函数名也是变量,函数体就是这个变量的值:

calc=lambdax:x*3

2.作用域的概念

Python的作用域一共有4种,分别是:

L(Local)局部作用域

E(Enclosing)闭包函数外的函数中

G(Global)全局作用域

B(Built-in)内建作用域

查找变量的值时以L-->E-->G-->B的顺序进行查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找。

说明:Python除了def/class/lambda外,其他如:if/elif/else/try/exceptfor/while并不能改变其作用域。定义在它们之内的变量,外部还是可以访问。

3.全局变量与局部变量

一个程序中的变量是有作用域(scope)的,作用域的大小会限制变量可访问的范围。Python中的变量根据作用域范围的大小不同可以分为:全局变量和局部变量。顾名思义,全局变量表示变量在全局范围内都可以被访问,而局部变量只能在一个很小的范围内生效。这就好比国家主席与各省的省长:在全国范围内国家主席都是同一个人,因此国家主席就是个全局变量;而各省的省长只能在某个省内生效,河北省省长是一个人,河南省省长又是另外一个人,因此省长就是个局部变量。对于Python编程语言而言,定义在一个函数内部的变量就是一个局部变量,局部变量只能在其被声明的函数内访问;定义在函数外部的变量就是全局变量,全局变量可以在整个程序范围内访问。

来看个示例:

#!/usr/bin/envpython

#-*-encoding:utf-8-*-

name='Tom'

deffunc1():

age=10

print(name)

print(age)

deffunc2():

sex='F'

print(name)

print(sex)

print(name)

func1()

func2()

输出结果:

Tom

Tom

10

Tom

F

上面的示例中,name是一个全局变量,因此它在程序的任何地方都可以被访问;而func1函数中的age变量和func2函数中的sex变量都是局部变量,因此它们只能在各自定义的函数中被访问。

问题1:如果在函数内定义一个与全局变量同名的变量会怎样?

#!/usr/bin/envpython

#-*-encoding:utf-8-*-

name='Tom'

deffunc3():

name='Jerry'

print(name)

print(name)

func3()

print(name)

输出结果:

Tom

Jerry

Tom

通过上面两个示例的输出结果我们可以得出这样的结论:

函数内引用一个变量时,会先查找该函数内部是否存在这样一个局部变量,如果存在则直接引用该局部变量,否则将查找并引用全局变量;

对局部变量的赋值并不会对全局变量产生什么影响,因为它们本来就是两个不相关的变量。

问题2:如果想在上面示例中的函数内部为全局变量重新赋值怎么办?

可以在函数内部通过global关键字声明该局部变量就是全局变量:

#!/usr/bin/envpython

#-*-encoding:utf-8-*-

python变量与作用域

name='Tom'

deffunc4():

globalname

name='Jerry'

print(name)

print(name)

func4()

print(name)

输出结果:

Tom

Jerry

Jerry

可见全局name的值的确被func4函数内部的操作改变了。

问题3:能不能将全局变量通过传参的方式传递给函数,然后在函数内部对全局变量做修改呢?

变量值的改变通常有两种方式:(1)重新赋值(2)改变原有值。要想在函数内部通过重新赋值来改变全局变量的值,则只能通过上面介绍的使用global关键字来完成,通过传参是无法实现的。而要想在函数内部改变全局变量的原有值的属性就要看该参数是值传递还是引用传递了,如果是引用传递则可以在函数内部对全局变量的值进行修改,如果是值传递则不可以实现。具体请看下面的分析。

以上内容为大家介绍了python变量与作用域,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注IT培训机构:开发教育。

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)