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

  • 相关阅读:
    ul不加宽高
    获取元素的外部样式问题
    设置定时器、重启定时器要注意的问题
    php的var关键字
    抽象类(abstract class)和 接口(interface)
    __sleep和__wakeup
    类型约束
    TensorFlow 拾遗
    Datasets and Evaluation Metrics used in Recommendation System
    触龙——可解释推荐系统
  • 原文地址:https://www.cnblogs.com/vivivi/p/7300090.html
Copyright © 2011-2022 走看看