python学习第11天

一.locals 和 globals函数

1.locals函数:获取当前作用域中的所有内容

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

locals如果在函数里面,调用locals(),获取的是调用之前的所有变量,返回字典,是局部空间作用域

2.globals函数:获取全局作用域的所有内容

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

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

3.globals返回的是系统的字典

(1)正常方式定义变量

yunchao="666"

(2)通过系统的全局字典添加键值对,可以动态创建全局变量

dic = globals()

print(dic)

k="yunchao"

dic[k]="帅气的大帅哥"

print(yunchao)

(3)在函数中,批量创建全局变量

def  func():

    dic=globals()

    for i in range(1,6):

      dic["p%d" % (i)] = i

func()

print(p1)

print(p2)

print(p3)

print(p4)

print(p5)

二.函数的嵌套

1.

嵌套在函数外边的叫做外函数

嵌套在函数里面的叫做内函数

注意:

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

2)调用外部函数后,内部函数可以在函数外部调用么?  不可以

3)内部函数可以在函数内部调用么?  可以

4)内部函数在函数内部调用时,是否有先后顺序?  有(必须先定义在调用)

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

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

3. nonlocal 关键字(用来修改局部变量)

nonlocal遵循 LEGB原则

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

2)如果上一级找不到,那么继续向上寻找

3)全都找不到,则直接报错

4)不使用nonlocal,也可以修改局部变量,可以使用列表的形式,通过索引来修改局部变量

三.闭包函数

1.定义:

1)内部函数使用外函数的局部变量

2)外函数将内函数返回出来的过程,叫做闭包

3)里面的内函数叫做闭包函数

获取闭包函数使用的变量 用__closure__ (元组形式),__cell__contents(获取单元格对象里面的内容)

2.闭包的特点

内函数使用了外函数的局部变量,该局部变量与内函数发生了绑定,延长该变量的生命周期

3.闭包的意义

闭包可以优先使用外函数的局部变量

局部变量在函数外部不能被直接使用

对局部变量实现了保护的作用,外部无法访问

4.匿名函数(lambda 表达式)

1)定义:用一句话来表达只有返回值的函数

2)特点:简洁,高效,方便

3)语法结构

lambda  参数:返回值

1,无参的lambda表达式

func = lambda  : "我是个大帅哥"

2,有参的lambda表达式

func = lambda  n  : type(n)

3,带有判断条件的lambda表达式

三目运算符

真值 if  条件表达式 else  假值

如果条件表达式成立,为真,返回真值

如果条件表达式不成立,为假,返回假值

func = lambda n : "偶数"   if  n  % 2 ==0 else  "奇数"

原文地址:https://www.cnblogs.com/yunchao-520/p/12882472.html