python作用域、global、nonlocal语句、lambda表达式语法说明

python作用域、global、nonlocal语句、lambda表达式语法说明

python 作用域:

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

python 分为四个作用域 LEGB

局部作用域 :Local function L

外部嵌套函数作用域 :Enclosing function locals E

函数定义所在模块(文件)的作用域 Global(Mudule) G

python 内置模块的作用域 Builtin(pyton) B

变量名的查找规则:L->E->G->B

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

global 语句:

作用:

告诉解释器,global语句声明的一个或多个变量,这些变量的作用域为模块级的作用域,也称作全局变量

全局声明(global)将赋值变量映射到模块内部的作用域

如:

v = 100

def fn():

global v

v = 200

fn()

print(v) ->输出200

说明:

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

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

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

global变量列表里的变量不能出现在此作用域内的形参列表里

nonlocal 语句:

作用:

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

语法:

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

说明:

nonlocal 语句只能在被嵌套函数内部进行使用

访问 nonlocal变量将对外部嵌套函数的作用域的变量进行操作

当有两层或两层以上的函数嵌套时,访问nonlocal变量只对最近一层的变量进行操作

nonlocal语句的变量列表里的变量名,不能出现在此函数的参数列表中

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

作用:

创建一个匿名函数对象

同 def 类似,但不提供函数名

语法:

lambda [参数1,参数2,...]:表达式  # 只能是一条表达式,不能是语句块

如:

def myadd(x, y):

return x + y

以上函数可以改写为:

myadd = lambda x, y : x + y

print('2 + 3 =',myadd(2 ,3)) ->2 + 3 = 5

语法说明:

lambda 只是一个表达式,它用来创建一个函数对象

当lambda表达式调用时,先执行冒号后(:)的表达式,并返回表达式的结果的引用

lambda 表达式创建的函数只能包含一条"表达式"

lambda 比函数简单,且可以随时创建和销毁,有利于减少程序的偶合度


最后编辑于:2019/07/27作者: 牛逼PHP

发表评论