python第四天学习总结

1.名称空间
a.全局名称空间(命名空间):运行程序时,变量与值的内存地址的对应关系,不包括函数。
b.局部名称空间:如果是函数,会将函数名存在内存中,函数体不管。执行函数时会临时开辟一个空间,存放函数体里面的代码,函数外面访问不到临时空间的内容,函数执行完后,临时空间会释放掉。
c.内置名称空间:存放python内置内容的空间,比如print()等
d.全局作用域:全局名称空间 内置名称空间
局部作用域:局部名称空间

2.加载顺序:内置名称空间---全局名称空间(程序执行时)---局部名称空间(函数调用时)
取值顺序(单向不可逆):局部名称空间(函数调用时)---全局名称空间(程序执行时)---内置名称空间。取值只是引用,不能改变

3.函数的嵌套:嵌套中的函数执行完后,才会执行下面的代码。函数中的函数是不同的临时空间

  1. global():返回一个字典,存放全局名称空间的内容。 print(globals())
    locals():返回一个字典,当前位置所有的变量,如果函数中嵌套多个函数,只返回locals()所在的那一层 print(locals())

5.gloabal:引用并改变一个全局变量;在局部作用域声明一个全局变量
count = 1
def func1():
global count #引用全局的count变量,如果全局没有此变量,也可以在此处声明一个新count
count = count + 1 #可以在函数体内改变count的值,如果没有global,此处只能引用count而不能改变
count = count + 100
print(count)
func1()
print(count) #全局的count也改变

noloacal:不能操作全局变量;从哪层引用的该变量,从那层开始全部改变
def func1():
count = 1
def inner():
nonlocal count #引用上一级的count
count = count + 3 #改变原count的值
print(count) #在inner函数内改变后的值
inner()
print(count) #上一级的count也改变,此count是局部变量,全局不能访问
func1()

6.函数名的运用(可以把函数名理解为一个变量名):
a.函数名可以打印 print(func1) <function func1 at 0x000000000258F9D8>
b.函数名可以作为容器类数据的元素 list = [func1, func2, func3]
c.函数名可以作为函数的参数 func2(func1) func1相当于一个变量名
d.函数名可以作为函数的返回值 return func1 把func1返回给当前函数的执行者

7.闭包函数
定义:内层函数对外层函数非全局变量的引用
作用:闭包函数不会随着父级函数的结束而释放

def fun1():
name = 'cc'
def inner1():
print(name) #引用父级的name
inner1()
print(inner1.closure) #判断inner1是否是闭包,如果返回None则不是闭包函数,如果返回一段内存地址则是闭包函数
fun1()

8.装饰器
本质:闭包函数
作用:在不影响原函数执行的基础上,增加一些额外的功能
通用语法:
def timmer(f):
def inner(*args,*kwgrgs):
''' 被装饰函数之前的操作'''
ret = f(
args,**kwgrgs)
''' 被装饰函数之后的操作'''
return ret
return inner

猜你喜欢

转载自blog.51cto.com/13544778/2122321