Python变量作用域有哪些

  

Python变量作用域有哪些?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

在程序中定义一个变量时,这个变量是有作用范围的,变量的作用范围被称为它的作用域。

根据定义变量的位置,变量分为两种:

<强>局部变量:在函数中定义的变量,包括参数,都被称为局部变量。

<强>全局变量:在函数外面,全局范围内定义的变量,被称为全局变量。

每个函数在执行时,系统都会为该函数分配一块“临时内存空间”,所有的局部变量都被保存在这块临时内存空间内。当函数执行完成后,这块内存空间就被释放了,这些局部变量也就失效了,因此离开函数之后就不能再访问局部变量了。

全局变量意味着它们可以在所有函数内被访问。

不管是在函数的局部范围内还是在全局范围内,都可能存在多个变量,每个变量”持有“该变量的值。从这个角度来看,不管是局部范围还是全局范围,这些变量和它们的值就像一个“看不见”的字典,其中变量名就是字典的关键,变量值就是字典的价值。

实际上,Python提供了如下三个工具函数来获取指定范围内的“变量字典”:

全局():该函数返回全局范围内所有变量组成的“变量字典”。

当地人():该函数返回当前局部范围内所有变量组成的“变量字典”。

var(对象):获取在指定对象范围内所有变量组成的“变量字典”。如果不传参入对象数,当地人var()和()的作用完全相同。

全局()和当地人()看似完全不同,但它们实际上也是有联系的,关于这两个函数的区别和联系大致有以下两点:

当地人()总是获取当前局部范围内所有变量组成的“变量字典”,因此,如果在全局范围内(在函数之外)调用当地人()函数,同样会获取全局范围内所有变量组成的“变量字典”,而全局变量()无论在哪里执行,总是获取全局范围内所有变量组成的“变量字典”。

一般来说,使当地人用()和全局变量()获取的“变量字典”只应该被访问,不应该被修改。但实际上,不管是使用全局变量()还是使用当地人()获取的全局范围内的“变量字典”,都可以被修改,而这种修改会真正改变全局变量本身:但通过当地人()获取的局部范围内的“变量字典”,即使对它修改也不会影响局部变量。

下面程序示范了如何使当地人用(),全局变量()函数访问局部范围和全局范围内的“变量字典”:

def  test  ():   ,,,age =20   ,,,#,直接访问年龄局部变量   ,,,印刷(年龄),#,输出20   ,,,#,访问函数局部范围的“变量数组”   ,,,print(当地人()),#,{& # 39;年龄# 39;:,20}   ,,,#,通过函数局部范围的“变量数组”访问年龄变量   ,,,print(当地人()(& # 39;年龄# 39;]),# 20   ,,,#,通过当地人函数局部范围的“变量数组”改变年龄变量的值   ,,,当地人()(& # 39;年龄# 39;],=12   ,,,#,再次访问年龄变量的值   ,,,print (& # 39; xxx # 39;,,年龄),#,依然输出20   ,,,#,通过全局函数修改x全局变量   ,,,全局变量()(& # 39;x # 39;],=, 19   时间=x  5   y =20   print (globals ()), #, {…,, & # 39; x # 39;:, 5日,& # 39;y # 39;:, 20}   #,在全局访问内使当地人用函数,访问的是全局变量的“变量数组”   print(当地人()),#,{…,,& # 39;x # 39;:, 5日,& # 39;y # 39;:, 20}   #,直接访问x全局变量   打印(x), # 5   #,通过全局变量的“变量数组”访问x全局变量   打印(globals () (& # 39; x # 39;]), # 5   #,通过全局变量的“变量数组”对x全局变量赋值   全局变量()(& # 39;x # 39;],=39   打印(x), #,输出39   #,在全局范围内使当地人用函数对x全局变量赋值   当地人()(& # 39;x # 39;],=99   打印(x), #,输出99

从上面程序可以清楚地看的出,当地人()函数用于访问特定范围内的所有变量组成的“变量字典”,而全局变量()函数则用于访问全局范围内的全局变量组成的“变量字典”。

全局变量默认可以在所有函数内被访问,但如果在函数中定义了与全局变量同名的变量,此时就会发生局部变量遮蔽(隐藏)全局变量的情形。例如如下程序:

name =, & # 39;查理# 39;   def  test  ():   ,,,#,直接访问名字全局变量   ,,,print(名字),#,查理   测试()   打印(名称)

Python变量作用域有哪些