python变量作用域
来源:互联网 发布:mac系统误删文件 编辑:程序博客网 时间:2024/06/08 18:34
python的作用域并不是哪里都能访问的,类似于Java,分全局和局部,python变量的作用域大概分为以下四类:
L(local) 局部作用域
E(Enclosing) 闭包函数外的函数中
G(Global) 全局作用域
B(Built-in) 内建作用域
遵循LEGB原则:以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找。
x = int(2.9) # 内建作用域g_count = 0 # 全局作用域def outer(): o_count = 1 # 闭包函数外的函数中 def inner(): i_count = 2 # 局部作用域
在python中,模块(module),类(class)、函数(def、lambda)会产生新的作用域,其他代码块是不会产生作用域的,也就是说,类似条件判断(if…..else)、循环语句(for x in data)、异常捕捉(try…catch)等的变量是可以全局使用的
dataList = [1, 2, 3, 4]for data in dataList: a = 1 #for循环中的变量a b = data + aprint(a) #在函数外也可视为全局变量使用
全局变量是指在函数外的变量,可以在程序全局使用,局部变量是指定义在函数内的变量,只能在函数内被声明使用
若内部作用域的想要修改外部作用域的变量,就要使用global关键字:参考一下代码
1、未使用global关键字
a = 1def demo(): # IDE提示a = 123:This inspection detects shadowing names defined in outer scopes # 大概意思是给变量取的这个名字,可能会冲突,它是函数外部的变量 a = 123 print(a)demo()print(a)运行结果是1231全局变量a的值还是1,没有被改变
2、使用global关键字
a = 1def demo(): global a a = 123 print(a)demo()print(a)运行结果是123123全局变量a的值被修改
nonlocal 关键字的使用方法和global关键字类似,修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量
def outer(): num = 10 def inner(): nonlocal num # nonlocal关键字声明 num = 100 print(num) inner() print(num)outer()运行结果为100100闭包函数外的变量num值被修改
阅读全文
0 0
- python 变量作用域
- python 变量作用域
- python变量作用域
- python 变量作用域
- python 变量作用域
- python变量作用域
- python 变量作用域
- python变量作用域
- 【Python】变量作用域
- python 变量作用域
- python 变量作用域
- Python变量作用域
- Python 变量作用域
- python 变量作用域
- python 变量作用域
- python-变量作用域
- Python变量作用域
- python变量作用域
- 结构体
- 关于 request、response以及attribute的混淆问题
- Git 合并、分支、提交
- STL-map容器
- shell命令--ln
- python变量作用域
- 棋盘问题(深度搜索)
- HDU 2709 Sumsets —— 递推
- HDU 4526 威威猫系列故事——拼车记 dp
- 玲珑杯” Round #19 Buildings 【线段树+尺取法】+【vector + 尺取法】
- Java 8 Streams map()
- Bean感知Spring容器
- BZOJ 3998 弦论 (后缀自动机)
- JDK 动态代理执行流程解析