函数、名称空间与作用域、闭包函数、装饰器

一:函数对象:

  函数是第一类对象:指的是函数的内存地址可以像一个变量值一样去使用。

  1.变量值可以被使用

  2.变量值可以当作参数传给另一个函数

  3.变量值可以当作函数的返回值

  4.变量值可以当作容器类型的元素

def register():
    print('注册....')
def login():
    print('登录....')
def pay():
    print('支付....')
def transfer():
    print('转账....')
func_dic={
    '1':register,
    '2':login,
    '3':pay,
    '4':transfer
}
# func_dic['1']()
while True:
    print("""
    0 退出
    1 注册
    2 登录
    3 支付
    4 转账
    """)
    choice=input('请输入你的操作: ').strip()
    if choice == '0':break
    if choice not in func_dic:
        print('输错的指令不存在')
        continue
    func_dic[choice]()
容器类型举例

二:函数的嵌套调用:在一个函数内部又调用其它函数

三:函数的嵌套定义:在函数内又定义了其他函数

四:名称空间与作用域

  1.名称空间Namespace:指的就是存放名字与值内存地址绑定关系的地方(内存空间)

  2.名称空间分为三大类:

    内置名称空间:存放的是python解释器自带的名字

    产生:python解释器的启动则产生

    销毁:python解释器关闭额销毁

  3.全局名称空间:在顶级定义的名字

    产生:执行python程序时产生

    销毁:python程序执行完毕后则销毁

  4.局部名称空间:在函数内定义的名字

    产生:在函数调用时临时产生

    销毁:在函数调用完毕后邪恶销毁

  5.三种名称空间的产生的先后顺序:内置——》全局——》局部

  查找名字的顺序:从当前位置往外一层一层查找

    如果当前在局部名称空间:局部——》全局——》内置

    如果当前在全局名称空间:全局——》内置

五:作用域(指的是作用范围)

  全局作用域:包含内置与全局名称空间的名字

    特点:全局存活,全局有效

  局部作用域:包含局部名称空间的名字

    特点:临时存活,局部有效

  !!!作用域关系是在函数定义阶段就已经固定死了,与调用位置无关

六:闭包函数

  闭:封闭,指的是该函数是定义一个函数内部的函数

  包:该函数内部包含对外层函数名字的引用

  闭包函数指的是在定义在函数内部的函数,并且该内部函数包含对外层函数作用域名字的引用

  为函数传值的两种方式:

    方式一:直接以参数的形式传入

    方式二:闭包函数

七:装饰器

  装饰器指的是为别装饰对象添加新功能的工具

  装饰器本身可以是任意可调用的对象(函数),被装饰的对象也可以是任意可调用的对象(函数)

  目标:写一个函数来为另外一个函数添加新功能

  为何要用?

    开放封闭原则:软件一旦上线,就应该地修改封闭,对扩展开放

    对修改封闭:不能修改功能的源代码,也不能修改功能的调用方式

    对扩展开放:可以为原有的功能添加新功能

  装饰器就是要在不修改功能源代码以及调用方式的前提下为原功能添加额外的新的功能

  

  

原文地址:https://www.cnblogs.com/liuxiaolu/p/10034878.html