首页 / 知识
python变量与作用域
2023-11-12 13:36:00
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-*-
name='Tom'
deffunc4():
globalname
name='Jerry'
print(name)
print(name)
func4()
print(name)
输出结果:
Tom
Jerry
Jerry
可见全局name的值的确被func4函数内部的操作改变了。
问题3:能不能将全局变量通过传参的方式传递给函数,然后在函数内部对全局变量做修改呢?
变量值的改变通常有两种方式:(1)重新赋值(2)改变原有值。要想在函数内部通过重新赋值来改变全局变量的值,则只能通过上面介绍的使用global关键字来完成,通过传参是无法实现的。而要想在函数内部改变全局变量的原有值的属性就要看该参数是值传递还是引用传递了,如果是引用传递则可以在函数内部对全局变量的值进行修改,如果是值传递则不可以实现。具体请看下面的分析。
以上内容为大家介绍了python变量与作用域,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注我们
最新内容
相关内容
使用Python的toolz库开始函数式编
使用Python的toolz库开始函数式编程,代码,函数,培训,位置,参数,字典,顺序,操作,结果,测试,toolz库允许你操作函数,使其更容易理解,更容易测试代为什么Python没有main函数?
为什么Python没有main函数?,入口,代码,灵活,函数,培训,状态,统一,项目,网上,名称,毫无疑问,Python中没有所谓的主入口函数,但是互联网上经常有文如何理解Python一切都是变量的说法
如何理解Python一切都是变量的说法?,名称,对象,代码,名字,地址,情况,数字,概念,培训,列表,Python的好处之一是与其他语法繁重的语言相比,Pytho提升Python数据分析能力的方法
提升Python数据分析能力的方法,分析,数据,工具,代码,时间,环境,报告,信息,培训,标准,1.Pandas分析包这个工具的好处是显而易见的。下面的动画Python内置函数
Python内置函数,数字,函数,培训,位置,第一,代码,异常,数据,公式,序列,python中有许多内置函数,不像print那么广为人知,但它们却异常的强大,用好python之什么是函数式编程?
python之什么是函数式编程?,系统,概念,项目,大规模,状态,数据,培训,函数,语言,副作用,函数式编程(简称FP)是一种编程范式,其中最基本的元素是Python的函数式
Python的函数式,名称,术语,概念,培训,函数,变量,对象,参数,希腊字母,赋值,尽管Python并不是以函数式为主的语言,但对它来说支持函数式编程也相Python安装和配置环境变量
Python安装和配置环境变量,系统,位置,培训,环境变量,变量,分号,编辑,内容,语法,路径,一、Python的安装:在网上找一个python的安装包,我找的pythPython变量数据类型的转换
Python变量数据类型的转换,代码,数据,培训,信息,字符串,类型,变量,整数,浮点,函数,虽然Python是弱类型编程语言,不需要像Java或C语言那样还要Python变量的类型(弱类型语言)
Python变量的类型(弱类型语言),检测,代码,数据,培训,类型,变量,语言,赋值,数字型,字符串,在强类型的编程语言中,定义变量时要指明变量的类型,而Python构造函数该怎么写?
Python构造函数该怎么写?,代码,数据,概念,培训,信息,函数,方法,参数,实例,类型,在java中构造函数是与类同名的,而且会伴随着实例化的动作而执python函数的定义与调用
python函数的定义与调用,名称,代码,数字,信息,函数,位置,通用,培训,被加数,加数,1.函数的定义高级编程语言通常会提供很多内置的函数来屏蔽底