第11天

全局变量 与 局部变量 及 其关键字的使用

#局部变量:函数内部的变量是局部变量,作用域仅在函数内部可见(局部命名空间)
#全局变量:函数外部的变量是全局变量,作用域横跨整个文件(全局命名空间)
#内置函数:内建命名空间

-- globals() :返回字典,存放着全局作用域所有内容

#### locals 和 golbals  
locals 获取当前作用域的所有内容
如果在函数外 调用locals()获取的是打印之前的所有变量,返回字典
# '''
# a = 1
# b =2
# res = locals()
# print(res)

# '''

在函数内部 调用locals()获取的是调用处之前的所有局部变量



globals 获取全局作用域的所有内容
如果在函数外 调用globals()获取的是打印之前的所有变量,返回字典


在函数内部 调用globals()获取的是调用处之前的全局变量


-- locals()  :返回字典,当前作用域所有内容(locals调用之前的变量)
-- global    :关键字:声明全局变量获修改全局变量
-- nonlocal  :关键字:修改局部变量(当前函数上一层的局部变量)

修改全局变量 global

修改局部变量 nonlocal

专门修改当前作用域上一级的局部变量

遵循LEGB原则

LEGB原则(即就近原则找变量)

#找寻变量的调用顺序采用LEGB原则(即就近原则)
B —— Builtin(Python);Python内置模块的命名空间      (内建作用域)
G —— Global(module); 函数外部所在的命名空间        (全局作用域)
E —— Enclosing function locals;外部嵌套函数的作用域(嵌套作用域)
L —— Local(function);当前函数内的作用域            (局部作用域)
依据就近原则,从下往上 从里向外 依次寻找

 

函数嵌套:

    内函数

    外函数

(1)内部函数可以直接在函数外部调用么

  不可以
(2)调用外部函数后,内部函数可以在函数外部调用吗

  不可以  
(3)内部函数可以在函数内部调用吗

可以
(4)内部函数在函数内部调用时,是否有先后顺序

有的

# ###闭包函数
'''    
内函数使用了外函数的局部变量
外函数将内函数返回出来的过程,叫做闭包
里面的内函数叫做闭包函数
'''

闭包

# 获取闭包函数使用的变量  __closure__ , cell_contents(了解)

闭包的定义:
    内函数使用外函数的局部变量,并且外函数将内函数返回出来的方法叫闭包,
    返回的内函数叫 闭包函数.

闭包的特点:
    内函数使用了外函数的局部变量,外函数的局部变量与内函数发生绑定,延长该变量的生命周期
    (实际内存给它存储了这个值,暂时不释放)

闭包的意义:
    闭包可以优先使用外函数中的变量,并对闭包中的值起到了封装保护的作用.外部无法访问.

匿名函数

'''
用一句话来表达只有返回值的函数,
特点 简洁 高效
语法结构:
 lambda 参数 : 返回值
'''

##三目运算符

'''
真值 if 条件表达式 else 假值
表达双向分支
'''

func = lambda x,y :x if x>y else y

 

posted @ 2020-05-13 13:24  qeeq  阅读(160)  评论(0编辑  收藏  举报