初学 Python(十五)——装饰器

  初学 Python,主要整理一些学习到的知识点,这次是生成器。

#-*- coding:utf-8 -*-
import functools
def current():
print 'nihao'
current()
g = current
g()
#函数有默认字段__name__(2个下划线)
print current.__name__
print g.__name__ '''''
装饰器的定义
在不改变某个函数的内部代码的情况下
在执行函数的前后加上一些逻辑
称作装饰器
'''
#举例,在current函数运行前打印一行日志 def log(func):
def wrapper(*args,**kw):
print 'call %s()'%func.__name__
return func(*args,**kw)
return wrapper @log
def current2():
print 'nihao' current2() '''''
看例解疑:
当给current2函数加上@log后
会发现current2执行前先打印了call current2()
这是因为装饰器的调用相当于把后面跟的函数放进了
装饰器里面去了.上面执行current2步骤:
1.执行current2(),返回wrapper()
2.执行wrapper(),打印call current2(),得到current2()
3.执行current2(),打印'nihao'
''' #上面的@log定义等同于下面的形式
#current2 = log(current2)
current2()
print 'current2函数名:'
print current2.__name__ #上面的装饰器本身不带参数,为2层嵌套.
#如何要带参数,那就要3层嵌套,先获得参数
def logt(text):
def log(func):
@functools.wraps(func)
def wrapper(*args,**kw):
print '%s %s():'% (text,func.__name__)
return func(*args,**kw)
return wrapper
return log
@logt('execute')
def current3():
print 'nihaoa'
print '调用装饰器logt:'
current3() '''''
上面的写法很容看出来执行的步骤
1.执行current3(),得到log()
然后就跟之前的顺序一样
'''
#@logt定义等同下面的形式
#current3 = logt('execute')(current3)
#但是你会发现它打印的信息中有wrapper函数
#而且函数名称也变为了wrapper
print '执行经过装饰器改装后的current3:'
current3() print 'current3函数名:'
print current3.__name__
#这是什么原因,我也不知道#正在理解中 #解决方法是加上这么一句@functools.wraps(func)就解决啦

初学 Python(十五)——装饰器的更多相关文章

  1. 十. Python基础(10)--装饰器

    十. Python基础(10)--装饰器 1 ● 装饰器 A decorator is a function that take a function as an argument and retur ...

  2. Py修行路 python基础 (十)装饰器

    装饰器 一.定义 装饰器:顾名思义,就是对某个东西起到装饰修饰的功能. python中的装饰器,其本质上就是一个python函数,它可以让其他函数在不需要任何代码变动的前提下增加额外功能.通俗理解就是 ...

  3. Noah的学习笔记之Python篇:装饰器

    Noah的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 3.命令行解析 注:本文全原创,作者:Noah Zhang  (http://www.cnblogs.com/noahzn/) ...

  4. Day04 - Python 迭代器、装饰器、软件开发规范

    1. 列表生成式 实现对列表中每个数值都加一 第一种,使用for循环,取列表中的值,值加一后,添加到一空列表中,并将新列表赋值给原列表 >>> a = [0, 1, 2, 3, 4, ...

  5. python设计模式之装饰器详解(三)

    python的装饰器使用是python语言一个非常重要的部分,装饰器是程序设计模式中装饰模式的具体化,python提供了特殊的语法糖可以非常方便的实现装饰模式. 系列文章 python设计模式之单例模 ...

  6. Python进阶(六)----装饰器

    Python进阶(六)----装饰器 一丶开放封闭原则 开放原则: ​ 增加一些额外的新功能 封闭原则: ​ 不改变源码.以及调用方式 二丶初识装饰器 装饰器: ​ 也可称装饰器函数,诠释开放封闭原则 ...

  7. Python入门篇-装饰器

    Python入门篇-装饰器 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.装饰器概述 装饰器(无参) 它是一个函数 函数作为它的形参 返回值也是一个函数 可以使用@functi ...

  8. 面向切面编程AOP——加锁、cache、logging、trace、同步等这些较通用的操作,如果都写一个类,则每个用到这些功能的类使用多继承非常难看,AOP就是解决这个问题的,python AOP就是装饰器

    面向切面编程(AOP)是一种编程思想,与OOP并不矛盾,只是它们的关注点相同.面向对象的目的在于抽象和管理,而面向切面的目的在于解耦和复用. 举两个大家都接触过的AOP的例子: 1)java中myba ...

  9. Python三大器之装饰器

    Python三大器之装饰器 开放封闭原则 一个良好的项目必定是遵守了开放封闭原则的,就比如一段好的Python代码必定是遵循PEP8规范一样.那么什么是开放封闭原则?具体表现在那些点? 开放封闭原则的 ...

  10. python高级之装饰器

    python高级之装饰器 本节内容 高阶函数 嵌套函数及闭包 装饰器 装饰器带参数 装饰器的嵌套 functools.wraps模块 递归函数被装饰 1.高阶函数 高阶函数的定义: 满足下面两个条件之 ...

随机推荐

  1. STL的空间配置器std_alloc 笔记

    STL的空间配置器std_alloc 笔记 C++的内存分配基本操作是 ::operator new(),内存释放是 ::operator delete(),这里个全局函数相当于C的malloc和fr ...

  2. vue-schart : vue.js 的图表组件

    介绍 vue-schart 是使用vue.js封装了sChart.js图表库的一个小组件.支持vue.js 1.x & 2.x 仓库地址:https://github.com/lin-xin/ ...

  3. matplotlib.pyplot.hist

    **n, bins, patches = plt.hist(datasets, bins, normed=False, facecolor=None, alpha=None)** ## 函数说明 用于 ...

  4. 【转载】QT QTableView用法小结

    原始日期: 2016-08-16 09:28 来源:http://blog.csdn.net/wang_lichun/article/details/7805253 QTableView常用于实现数据 ...

  5. celery的使用

    1.celery的任务调度 # -*- coding: utf-8 -*- import threading from bs4 import BeautifulSoup from tornado im ...

  6. template might not exist or might not be accessible by any of the configured Template Resolvers

    距离上一篇文章已经很长时间了,最近太忙碌了,今天发布spring boot遇到一个问题,找了好久才找到解决办法,今天贴出来和大家一起分享下,首先看错误信息 HTTP Status 500 - Requ ...

  7. [leetcode-623-Add One Row to Tree]

    Given the root of a binary tree, then value v and depth d, you need to add a row of nodes with value ...

  8. Vijos 1011 清帝之惑之顺治 记忆录式的动态规划(记忆化搜索)

    背景 顺治帝福临,是清朝入关后的第一位皇帝.他是皇太极的第九子,生于崇德三年(1638)崇德八年八月二ten+six日在沈阳即位,改元顺治,在位18年.卒于顺治十八年(1661),终24岁. 顺治即位 ...

  9. h5 新增特性用法---持续更新

    1.dataset <div class="box" data-title1="自定义属性" data-age="18" data-m ...

  10. 简单总结几种常见web攻击手段及其防御方式

    web攻击手段有几种,本文简单介绍几种常见的攻击手段及其防御方式 XSS(跨站脚本攻击) CSRF(跨站请求伪造) SQL注入 DDOS XSS 概念 全称是跨站脚本攻击(Cross Site Scr ...