购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.7 变量进阶

本节将分析变量的作用域。

2.7.1 全局变量和局部变量

Python与大部分的编程语言一样,也有全局变量和局部变量。大体上来讲,在函数内定义的变量为局部变量,在函数外声明的变量为全局变量。局部变量的生命周期在函数内。函数退出,局部变量就被销毁。全局变量在程序的整个生命周期都存在。只有程序退出时,全局变量才退出。

运行结果为1,不是2,因为modify函数内的num实际上是局部变量,无法对全局变量num进行更改。

2.7.2 global关键字

由于全局变量在整个程序范围内都可被访问,因此函数内部可以使用全局变量。如果要修改全局变量,则需要借助global关键字。在modify函数内部添加global num,意味着所使用的num变量是全局变量。

运行结果为2,因为通过global的声明,modify函数成功地将全局变量num修改为2。

2.7.3 nonlocal关键字

在modify函数中继续构建modify1函数,并通过modify1函数修改modify函数的变量。

运行结果为1,modify1函数想要修改上一层函数中的变量,需要借助nonlocal关键字。

运行后,得到预期的结果2。

2.7.4 变量作用域

在Python中,程序的变量并不是在任何位置都可以随意访问的,访问权限决定于这个变量在哪里赋值。变量的作用域决定了哪一部分程序可以访问哪个特定的变量。变量的作用域有4个:

· L(Local),局部作用域;

· E(Enclosing),闭包函数外的函数作用域;

· G(Global),全局作用域;

· B(Built-in),内建作用域。

Python按照LEGB的原则搜索变量,即优先级为L>E>G>B,也就是,在局部找不到,便会去局部外的局部找(如闭包),再找不到,就去全局找,若还是找不到,则去内建中找。 zAEFTedwX1aSRzxr4A3bf12UrnU5+phA+fKrKIXbjpg6Esl/5KYTdciPO/lh7WeG

点击中间区域
呼出菜单
上一章
目录
下一章
×