函数的嵌套闭包以及装饰器的了解

目录

函数的嵌套闭包以及装饰器的了解

名称空间的作用域

# 作用域
	名称空间所能作用的范围
# 内置名称空间
	程序任何阶段任何位置都可以使用(全局有效)
# 全局名称空间
	程序任何阶段任何位置都可以使用(全局有效)
# 局部名称空间
	一般情况下只在各自的局部名称空间中有效

函数的嵌套闭包以及装饰器的了解

global与nonlocal关键字使用


# 关键字global: 局部修改全局变量
# 关键字nonlocal: 内部局部修改外部局部


'''
如果想在局部修改全局数据
    如果数据为不可变类型则需要关键字global和nonlocal声明
    如果数据为可变类型则无需关键字global和nonlocal声明
'''


函数的嵌套闭包以及装饰器的了解

函数的嵌套闭包以及装饰器的了解

函数的嵌套闭包以及装饰器的了解

函数对线(函数名)

# 函数遇到括号就会被调用
  • 函数名可以当做变量名来赋值

函数的嵌套闭包以及装饰器的了解

  • 函数名还可以当函数的实参

函数的嵌套闭包以及装饰器的了解

  • 函数名可以当做函数的返回值

函数的嵌套闭包以及装饰器的了解

  • 函数名可以当做容器类型(内部存放多数据)的元素

函数的嵌套闭包以及装饰器的了解

函数的嵌套闭包以及装饰器的了解

函数的嵌套调用

# 嵌套调用:函数内部调用其他函数

函数的嵌套闭包以及装饰器的了解

函数的嵌套闭包以及装饰器的了解

函数的嵌套闭包以及装饰器的了解

函数的嵌套定义

# 函数体内部定义其他函数
# 将复杂的功能全部隐藏起来 暴露一个简单的接口

函数的嵌套闭包以及装饰器的了解

闭包函数

# 闭 :定义在函数内部的函数
# 包 :内部函数使用了外部函数的名称空间中的名字
'只有同时满足这两个特征的函数才能叫做闭包函数'
# 闭包函数其实是给函数传参的第二种方式
  • 闭包函数其实是给函数传参的第二种方式

  • 方式一 函数体代码用到数据需要用到数据 直接在括号定义形参即可


def index(username):
    print(username)
def my_max(a, b):
    if a > b:
        return a
    return b

  • 方式二 使用闭包函数

def outer(x,y):
    # x = 2
    # y = 40
    def my_max():
        if x > y:
            return x
        return y
    return my_max


res = outer(2,4)
print(res())

函数的嵌套闭包以及装饰器的了解

函数的嵌套闭包以及装饰器的了解

装饰器的了解


"""
装饰器并不是一个新的知识
	而是由我们之前所学习的 名称空间 函数对象 闭包函数组合而来
"""
# 器:指的是工具
# 装饰:给被装饰的对象添加额外功能

# 装饰器的原则就是

'''
装饰器的原则
	开放封闭原则
    	开发:对扩展开放
        封闭:对修改封闭
'''

'装饰器核心思想
  在不改变被"装饰对象内部代码"和"原有调用方式"的基础之上添加额外功能'

函数的嵌套闭包以及装饰器的了解

函数的嵌套闭包以及装饰器的了解

上一篇:Codeforces Global Round 17 简要题解


下一篇:织梦内容管理系统(DedeCms) 小说模块insert注入漏洞