zoukankan      html  css  js  c++  java
  • 装饰器 decorator

    def log(func):
        def wrapper(*args, **kw):
            print('call %s():' % func.__name__)
            return func(*args, **kw)
        return wrapper
    
    @log   # 相当于 now = log(now)
    def now():
        print('2017-8-6')
    f = now()

    print(now.__name__)

     1. python 解释器 发现@log  去调用log 函数;

       2. 执行log 前,需要一个func参数,这个参数就是@log下面修饰的函数: now()

      即 @log: --->  func = now()    即:闭包wrapper持有了自由变量now()

                --->   now = log(now) =>return wrapper(*args,*kw)

          即:now 已经指向了wrapper(*args,*kw)

       3. f = now(): -->连同func = now() 一起, 调用wrapper(*args,*kw),     

      4. wrapper  执行print语句,获取func变量的value:now()

       5. 执行return  返回 now() 函数的内容

       6. 最后打印now的名字,发现now 的名字为wrapper

     

     ------2018.1.11update 什么鬼,自己都看不明白 傻了吧

    closure  闭包

    调用函数A,返回了函数B,这个函数B就是闭包

    调用函数A时,传递的参数,就是自由变量

    函数A调用结束后,自由变量并不会被回收,仍由闭包B持有

    ---然而函数A 调用完毕后,即被释放,比类占用的资源少(类要在程序执行完毕后才释放资源)

    是由函数 及 其 自由变量相关的外部环境一起构成的实例

    不同的自由变量 和  相同的函数 组成了  不同的 实例

    闭包是由函数和与其相关的引用环境组合而成的实例

     1 '''
     2 打印各种动物叫声,用闭包实现
     3 '''
     4 
     5 # animal : 自由变量
     6 def animalVoice(animal):
     7     # animal_voice: 函数
     8     def animal_voice(voice):
     9         print('aminal:',animal,'voice:',voice)
    10     return animal_voic
    11 
    12 dog = animalVoice('dog')
    13 dog('wangwang')
    14 
    15 cat = animalVoice('cat')
    16 cat('miaomiao')

    encapsulation 封装

    enclose (something) in or as if in a capsule.

    将某物包裹在封闭的空间,或仿佛在封闭的空间

     学自:https://segmentfault.com/a/1190000004461404

  • 相关阅读:
    maven Spring MVC项目
    NET 解析HTML代码——NSoup
    Masstransit开发基于消息传递的分布式应用
    iOS项目生成通用Windows应用
    测试框架mochajs详解
    9宫格拼图
    spring 整合redis
    Linux下SSH Session复制
    File Templates for web.xml & web-fragment.xml (Servlet 2.3, 2.4, 2.5 + 3.0)
    极度简约 最小 Linux 发行版 Tiny Core Linux 7.1 发布
  • 原文地址:https://www.cnblogs.com/vivivi/p/7300090.html
Copyright © 2011-2022 走看看