文档章节

3.装饰器与闭包

comonda
 comonda
发布于 2016/11/07 10:58
字数 226
阅读 1
收藏 0

###刚刚遇到装饰器与闭包问题,这个有个小区分


  • 闭包一
def count_outter():
    L = []
    def count_inner():
        for i in range (1,5):
            L.append(i)
        return L
    return count_inner

a = count_outter()
print(a)
print(a())

结果
<function count_outter.<locals>.count_inner at 0x10137a9d8>
[1, 2, 3, 4]
  • 闭包二
def count():
    fs = []
    for i in range(1, 4):
        def f():
             return i*i
        fs.append(f)
    return fs

f1, f2, f3 = count()

结果
>>> f1()
9
>>> f2()
9
>>> f3()
9
  • 闭包三
def count():
    def f(j):
        def g():
            return j*j
        return g
    fs = []
    for i in range(1, 4):
        fs.append(f(i)) # f(i)立刻被执行,因此i的当前值被传入f()
    return fs

结果
>>> f1, f2, f3 = count()
>>> f1()
1
>>> f2()
4
>>> f3()
9
  • 装饰器一
import functools

def log(func):
    @functools.wraps(func)
    def wrapper(*args, **kw):
        print('call %s():' % func.__name__)
        return func(*args, **kw)
    return wrapper
  • 装饰器二:带参装饰器
import functools

def log(text):
    def decorator(func):
        @functools.wraps(func)
        def wrapper(*args, **kw):
            print('%s %s():' % (text, func.__name__))
            return func(*args, **kw)
        return wrapper
    return decorator

####资料来自廖老师的教程

© 著作权归作者所有

comonda
粉丝 0
博文 4
码字总数 1016
作品 0
广州
私信 提问
python三大神器===》装饰器

1.认识装饰器   如果你经常看我的博客,你已经学会了python的前两大‘神器’(迭代器,生成器),那么什么是装饰器呢?就如字面意义装饰器是对某个事物(通常指函数)进行装饰,让其在不修改...

许传坤
2018/08/23
0
0
python的闭包及装饰器

闭包: 闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说...

西索oO
2016/12/21
0
0
fluent python-第 7 章 函数装饰器和闭包(附:第 6 章 使用一等函数实现设计模 式)

第 6 章 使用一等函数实现设计模式 本章小结 很多情况下, 在 Python 中使用函数或可调用对象实现回调更自然, 这比模仿 Gamma、 Helm、 Johnson 和 Vlissides 在书中所述的“策略”或“命令...

时间之友
2017/12/04
0
0
Python 装饰器使用指南

装饰器是可调用的对象,其参数是另一个函数(被装饰的函数)。 装饰器基础知识 首先看一下这段代码 HUGOMORE42 在用某个@decorator来修饰某个函数func时

goodspeed
2017/08/15
0
0
Python学习笔记二十三(闭包 / 装饰器 )

函数 什么是函数? 将具有某种功能的代码放到一起, 构成一个函数. 为什么说函数? 因为需要研究一个问题, 函数可以嵌套调用, 那么可不可以嵌套定义? 函数的嵌套调用 函数能使用函数名调用, 那么...

DragonFangQy
2018/05/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

代理模式

//分静态代理和动态代理,区别:是否再编译时知道被被代理的对象 //思想,被代理类将自己的处理交给代理类,代理类可以添加一些新的功能,之后有代理类和客户端交互 https://www.cnblogs.co...

南桥北木
33分钟前
2
0
Spring系列教程七: Spring 整合mybatis的四种方式

一、使用注解实现整合mybatis 项目目录如下 第一步、导入jar包 <build> <resources> <!-- mapper.xml文件在java目录下 --> <resource> ......

我叫小糖主
39分钟前
6
0
阿里P7架构师:这些技术点没搞懂,我劝你不要跳槽!

阿里P7架构师架构师:这些技术点没搞懂,我劝你不要跳槽! 哪些技术点呢? 废话不多说,技术点全在下面这6张图里面了! 1.怎么看源码? 2.分布式 3.微服务 4.性能优化 5.工程化 粉丝福利:一...

别打我会飞
57分钟前
6
0
易错题

父类必须有一个无参构造,不然会报Implicit super constructor Parent() is undefined. Must explicitly invoke another constructor...

architect刘源源
今天
1
0
使用Json4s 将带有Timestamp的对象转json时 变为所在时区

在有Timestamp属性的对象转json时 最后出来的时间会减小8小时,是因为变成了0时区,需要将隐式转换中添加设置本地时区 import org.json4s.{DefaultFormats, Formats}import org.json4s.jac...

可达鸭Go
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部