7.5 变量作用域及类型

7.5 变量作用域及类型


在Python 程序设计中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。

7.5.1 变量作用域

变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。Python 的变量作用域一共有4 种,分别是局部作用域( Local )、闭包函数外的函数中( Enclosing )、全局作用域( Global )、内建作用域( Built-in )。

在Python 程序设计中,变量以局部作用域( Local)、闭包函数外的函数中( Enclosing )、全局作用域(Global) 、内建作用域( Built-in) 的规则查找,即在局部找不到,便会去局部外的局部找(例如闭包) ,再找不到就会去全局找,再者去内建中找,具体代码如下:

在Python 程序设计中,只有模块(module ) , 类( class )以及函数( def 、lambda) 才会引入新的作用域,其他的代码块(如if/elif/else/ 、try/except 、for/while 等)不会引新的作用域,也就是说,这些语句内定义的变量,外部也可以访问。

单击"开始"菜单,打开Python 3.6.5 Shell 软件,然后单击菜单栏中的"File/New File" 命令,创建一个Python 文件, 井命名为"Mypython7-9py" ,然后输入如下代码:

由于if语句的条件成立, msg1已指向"我是江语句中的变量!",所

以这个变量巴存在, 可以直接利用print( ) 函数输出。需要注意的是,由于if 语句的条件成立,就不会运行else 中的语旬,所以msg2 没有指向"我也是一个代码块变里",所以不能利用print( ) 函数输出rnsg2变量。

单击菜单栏中的"Run/Run Module" 命令或按下键盘上的"F5" ,就可以运行程序代码,结果如图7.10 所示。

需要注意的是,如果是自定义函数中的变量,由于是局部变量,所以外部不能访问。单击"开始"菜单,打开Python 3.6.5 Shell 软件,然后单击菜单栏中的"File/New File" 命令,创建一个Python 文件,并命名为"Mypython7-10.py" ,然后输入如下代码:

def test( ):

msg inner = '1 am from Baidu'

print (msg_inner)

单击菜单栏中的"Run/Run Module" 命令或按下键盘上的"F5" ,运行代码就会报错。从报锚的信息上看,说明msg_mner 未定义,无法使用,因为它是局部变量,只有在函数内可以使用,如图7.11 所示。

7.5.2 全局变量和局部变量

定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入作用域中。

单击"开始"菜单,打开Python 3.6.5 Shell 软件,然后单击菜单栏中的"FilelNew File" 命令,创建一个Python文件,并命名为"Mypython7-11.py" ,然后输入如下代码:

单击菜单栏中的"RunlRun Module" 命令或按下键盘上的"F5" ,就可以运行程序代码, 结果如图7.12 所示。

7.5.3 global 和nonlocal 关键字

当内部作用域想修改外部作用域的变量肘,就要用到global 和nonlocal关键字。下面先来看一下global 关键字的应用。

单击"开始"菜单,打开Python 3.6.5 Shell 软件,然后单击菜单栏中的"File/New File" 命令,创建一个Python 文件,并命名为"Mypython7-12.py" ,然后输入如下代码:

单击菜单栏中的"Run/Run Module" 命令或按下键盘上的"F5",就可以运行程序代码,结果如图7.13 所示。

下面来看一下nonlocal 关键字的应用。

单击"开始"菜单,打开Python 3.6.5 Shell 软件,然后单击菜单栏中的"File/New File" 命令,创建一个Python 文件,并命名为"Mypython7-13.py" ,然后输入如下代码:

单击菜单栏中的"Run/Run Module" 命令或按下键盘上的"F5" .就可以运行程序代码,结果如图7.14 所示。