Day04

作者: G流殇 | 来源:发表于2018-06-01 00:52 被阅读0次

名称空间,作用域,取值顺序

名称空间:当程序运行时,代码从上至下依次执行,将变量与值的关系存储在一个空间中,这个空间叫做名称空间,命名空间,全局名称空间。

局部名称空间:当程序遇到函数时,他会将函数名存在内存中,函数体莫不关心。
当函数执行时,内存会临时开辟一个空间,存放函数体里面的代码(变量,代码等),
函数外面访问不到临时空间的内容,随着函数的执行完毕,临时名称空间会释放掉,
向这个临时开辟的空间叫临时名名称空间,也叫局部名称空间。

python 中名称空间分三种:

    内置名称空间。
    全局名称空间。
    局部名称空间。

作用域:

    全局作用域:
        内置名称空间。
        全局名称空间。
    局部作用域
        局部名称空间。

加载顺序:

    内置名称空间 ---> 全局名称空间(当程序执行时) ---> 局部名称空间(当函数调用时)

取值顺序:单向不可逆
局部名称空间(当函数调用时) -->全局名称空间(当程序执行时) -->内置名称空间

加载顺序:

    内置名称空间 ---> 全局名称空间(当程序执行时) ---> 局部名称空间(当函数调用时)

取值顺序:单向不可逆

    局部名称空间(当函数调用时) -->全局名称空间(当程序执行时) -->内置名称空间

内置函数 globals() locals()

globals():返回一个字典,字典里面的内容是全局作用域的内容。
locals():返回一个字典,当前位置的所有变量。

关键字global,nonlocal

global,在函数内部修改全局变量

name = 'zhangsan'
def func1():
    global name
    name = 'lisi'
    print(name)
func1()
print(name)

nonlocal,在内层函数里面修改外层函数的变量

def func1():
    count = 1
    def inner():
        nonlocal count
        count = count + 3
        print(count)
    inner()
    print(count)
func1()

函数名的应用

函数名被称为:第一类对象。具有以下特性:

函数名可以作为容器类数据的元素
函数名可以作为函数的参数
函数名可以作为函数的返回值

闭包

闭包:内层函数对外层函数非全局变量的引用,就叫做闭包。Python解释器遇到闭包,这个局部命名空间不会随着函数的结束而释放。

装饰器

装饰器的本质是闭包,作用是在不修改原函数代码,不影响原有函数的执行方式的情况下增加功能,即装饰其他函数。

def wrapper(f):
    def inner(*args,**kwargs):
        """被装饰函数执行之前的操作"""
        ret = f(*args,**kwargs)
        """被装饰函数执行之后的操作"""
        return ret
    return inner

相关文章

网友评论

      本文标题:Day04

      本文链接:https://www.haomeiwen.com/subject/dhthsftx.html