python 函数嵌套函数 闭包函数 装饰器

函数的嵌套的定义

    在一个函数的内部又定义了另外一个函数

 

    def f1( ):

      x = 10      

      def f2 ( ) :   # f2 函数 如同变量 X  一样 只在f1 函数内部有效 外部调用无效.....

        print(' from f2  ') 

  f1( )     # No Error

  x          # name x is defind

  f2( )       # name f2  is defind

 

名称空间

  存放名字的地方,准确的说是存放变量名与绑定关系到地方...

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

 

  内置名称空间

    Python 解释器启动时,存放一些python内置的名字.....

    

  全局名称空间

    文件级别定义的名字,执行文件的时候会产生的名字,不是内置的,也不是在函数里面定义的名字,就是全局名称空间......

      (内置函数名字,定义的语法,)

    x = 10  

    def f1():

    import os 

    class foo():

    if x ==  1 :

      z = 3 

 

  局部名称空间

    在执行文件的过程中,如果调用了函数,则会产生该函数的局部名称空间,

    用来存放该函数内部定义的名字,该名字在函数调用时生效,在函数调用结束后失效.....     

 

  名称空间加载顺序......

    内置名称空间 -------- > 全局名称空间 ------- > 局部名称空间

 

 

  名字查找到顺序.......

    以当前位置之下而上找....... 

    名字的查找顺序?(在全局无法查看局部的,在局部可以查看全局的)

 

 

查看作用域:globals(),locals()

 

 作用域的关系

 

 在函数定义作用域到关系已经固定,与调用位置没有关系,在调用函数时必须回到函数原单位找作用域 ...... (重点!!!)

 

 

闭包函数

  定义在函数内部的函数,包含对外部作用域名字的引用,而不是对全局作用域名字的引用,那么该函数就称为比包函数 。。。。

装饰器

 

  1 为何要用装饰器:


    开放封闭原则:对修改封闭,对扩展开放

  2 什么是装饰器


    装饰器他人的器具,本身可以是任意可调用对象,被装饰者也可以是任意可调用对象。


    强调装饰器的原则:1 不修改被装饰对象的源代码 2 不修改被装饰对象的调用方式


    装饰器的目标:在遵循1和2的前提下,为被装饰对象添加上新功能

Decorator code

 

 

执行结果

 

 

@ 符号 干了什么熊事......

 

 

来一个有参数 and return vaule

 基于装饰器实现登录认证小程序...

带参数的装饰器 .....  装饰器本身带参

posted @ 2017-07-23 17:08  eggtea  阅读(240)  评论(0)    收藏  举报