标签:参数 命名 range 对象 无法 获取 == 创建 动态创建
一.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 "奇数"
标签:参数 命名 range 对象 无法 获取 == 创建 动态创建
原文地址:https://www.cnblogs.com/yunchao-520/p/12882472.html