python的作用域

作用域也叫名字空间,是访问变量时查找变量名的范围空间

python中的四个作用域 LEGB

作用域 英文解释 英文缩写
局部作用域 Local(function) L
外部嵌套函数作用域 Enclosing Function local E
函数定义所在模块(文件)的作用域 Global(module) G
Python内建模块的作用域 Builtin(python) B

示例:

# 此示例示意作用域
v = 100
def f1():
v = 200
print("f1.v=", v)
def f2():
v = 300
print("f2.v=", v)
f2()
f1()
print("v=", v)

变量名的查找规则

L ---> E ---> G ----> B

注:

在默认的情况下,变量名赋值会创建或改变当前作用域

内变量的绑定关系

global语句

作用:

告诉解释执行器,global语句声明的一个或多个变量
这些变量的作用域为模块级的作用域,也称为全局变量
全局声明(global)将赋值语句的变量映射到模块文件内部的作用域

语法:

global 变量名1
global 变量名1,变量名2,....

示例:

# 此示例示意global语句的语法和用法
v = 100
def f1():
global v # global声明v为全局变量
v = 200 # 想让此赋值语句去修改全局变量v f1()
print('v=', v) # 200

说明:

全局变量如果要在函数内部被赋值,则必须经过全局声明(否则会被认为是局部变量)

全局变量在函数内部不经过声明就可以直接访问(取值)

不能先创建局部变量,再用global声明为全局变量,此种做法不符合规则

global变量列表里的变量名不能出现在函数的形参列表里

nonlocal语句

作用:

告诉解释器,nonlocal声明的变量不是局部变量,也不是全局变量,而是外部嵌套函数内的变量

语法:

 nonlocal 变量名1, 变量名2, ....

示例:

# 此示例示意nolocal 语句的语法和用法
v = 100
def f1():
v = 200
print("f1.v=", v)
def f2():
nonlocal v
v = 300
print("f2.v=", v)
f2()
print("f1.v=", v)
f1()
print("全局的v=", v)

说明:

nonlocal语句只能在被嵌套函数内部进行使用
对nonlocal变量进行赋值将对外部嵌套函数作用域内的变量进行操作
当有两层或者两层以上函数嵌套时,访问nonlocal变量只对最近的一层变量进行操作
nonlocal语句的变量列表里的变量名不能出现在此函数的形参列表中

def 语句的作用是创建函数

lambda 表达式(又称匿名函数)

作用:

    创建一个匿名函数对象
同def 类似,但不提供函数名

语法:

 lambda [函数形参列表]: 表达式

示例:

# 此示例示意lambda 表达式的语法和用法
# def myadd(x, y):
# return x + y # 用lambda表达式来创建上面的函数
myadd = lambda x, y: x + y print("20+30=", myadd(20, 30)) # 50
print("4 + 5 =", myadd(4, 5)) # 9

说明:

   1. lambda 表达式创建的函数只能包含一条表达式
2. lambda 比函数简单,且可以随时创建和销毁,有利于
降低程序的偶合度

eval函数和exec() 函数

eval(source, global=None, local=None), 把一个

字符串source 当成一个表达式来执行,返回表达式执

行后的结果

exec(source, global=None, local=None) 把一个

字符串source当成程序来执行

最新文章

  1. 接触PHP快4个月
  2. Hibernate 缓存介绍
  3. Vim快捷键操作命令
  4. window删除文件时提示: 源文件名长度大于系统支持的长度
  5. SQLi filter evasion cheat sheet (MySQL)
  6. HDU 5753 Permutation Bo (推导 or 打表找规律)
  7. Linux正則表達式-反复出现的字符
  8. Bug 的严重性的定义参考
  9. 使用数据流的方式 将数据导出到指定形式到Word中 (不使用插件,很简单的一种)
  10. Java课程设计-定时器
  11. POJ - 1984 Navigation Nightmare 种类并查集
  12. hdu 5468(莫比乌斯+搜索)
  13. 在windows环境利用celery实现简单的任务队列
  14. MVC Scaffolding SmartCode-Engine 更新
  15. spark MLlib Classification and regression 学习
  16. Linux下批量修改后缀名
  17. Golang 函数
  18. serde
  19. eclipse show view失效的解决办法
  20. Qt Creator怎样更改默认构建目录

热门文章

  1. 【学习笔记】PYTHON数据分析与展示(北理工 嵩天)
  2. SQL注入总结
  3. openCV CV2用法(转)
  4. MAZE(2019年牛客多校第二场E题+线段树+矩阵乘法)
  5. JDOJ 2197: 校门外的树
  6. CanvasRenderingContext2D.fillText(text, x, y [, maxWidth]);
  7. spark基础知识一
  8. linux .pid文件简述
  9. 每日一问:讲讲 JVM 的类加载机制
  10. 安装goimports