首页 > 编程知识 正文

全局变量与局部变量,python 定义变量

时间:2023-05-04 05:25:11 阅读:135509 作者:713

变量定义以后,是有一定的使用范围,称之为变量的作用域。比如Java中,变量的使用范围是变量声明时所在的{}范围,而python的作用域对应的为同一个缩进。按着变量的使用范围给变量划分成如下两种:

1.全局变量:就是在函数外部定义的变量

2.局部变量:就是在函数内部定义的变量

1 .全局和局部函数作用域 局部变量作用域:只能在被声明的函数内部访问,函数外部使用不了。

这也是不同函数里可以定义名称一样变量的原因

全局变量作用域:可以在整个程序范围内访问,任意函数都可以访问

#1.局部变量、不可外部访问deff1(v1,v2 ) : # )参数也是局部变量(sum=v1 v2 a=5 # )。 函数外部不可访问returnsum-------name error 3360 name ' a ' is not defined============name error 3360 name ' a ' is not defined b=a 1不报告错误,参照全局变量的值,运算后,生成局部变量b. return a 1 # 在外部给定的全局变量函数内部使用print(f3 )1)=====================结果如下使用局部变量sum=5deff2(v2 ) : sum=0while v2 10: sum=v2 #。 其中sum使用局部变量的初始值0。 全局sum=5v2=1returnsumprint(sum ) print (F2 (0) )======结果如下:============================================

当Python遇到变量时,他将以这样的顺序从注意:1.PYTHON的作用域由def、class、lambda等语句产生,if、try、for等语句并不会产生新的作用域,换句话说就是if,try,for等语句里面定义的变量并不会随着该语句执行结束而回收,而是可以到处引用的,if,try,for等语句内变量作用域实际范围受其所在 的def,class,lambda范围约束:局部作用域(Local )当前嵌入作用域的局部作用域(Enclosing locals )全局/全局

2 .范围划分LEGB LEGB法则

局部变量:包含在用def关键字定义的语句块或函数定义的变量中。 每次调用函数时都会创建一个新的局部作用域。 Python也有递归。 自己调用自己,并在每次调用时创建新的本地名称空间。 除非特别声明为全局变量,否则函数中的变量声明将默认为局部变量。 如果需要在函数中定义全局变量,可以使用global关键字全局声明变量的范围。 局部变量域就像一个堆栈,是临时的,取决于创建其局部范围的函数是否处于活动状态。 因此,一般来说,建议尽量减少全局变量的定义,因为全局变量一直存在于模块文件的运行过程中,并且会占用内存空间。

注意:如果需要在函数中为全局变量赋值,则必须在函数中使用global语句将变量声明为全局变量。

具体什么是LEGB法则要等后面学完闭包后再讲,这里大致了解一下即可。

def关键字中也包括e,其中e和l是相对的,以及e相对于更高阶的函数为l。 与l的不同之处在于,对于某些函数,l是在此函数内部定义的局部作用域,而e是在此函数的父函数之上定义的局部作用域。 主要是为了实现Python的闭包,增加了实现。

1.L(local)局部作用域

也就是说,它是在模块层次结构中定义的变量,每个模块都是全局作用域。 这意味着在模块文件的顶级声明的变量具有全局范围,而模块的全局变量在外部成为模块对象的属性。

注意:全局范围仅限于单个模块文件中

2.E(enclosing)嵌套作用域

用系统内的固定模块定义的变量,即系统具有的变量函数等。 例如在3.G(global)全局作用域模块中预定义的变量。

gobal var=100 # gde ftest _ scope (: enclosing var=200 # edeffunc ) :localvar=300#lprint ) __name__ () )

val=10defF1(V1 ) :val=5returnvalprint ) val ) #结果为10,局部变量val范围为函数中的print(f1 )1) # 因为5 )使用global声明为全局变量val=10deff1 ) v1 ) : global val=30 returnval print )的结果为10 .但是更新val的值==================================http://www.Sina.com /

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。