1. 将单方法的类转换为函数

你有一个除 __init__() 方法外只定义了一个方法的类。为了简化代码,你想将它转换成一个函数。

from urllib.request import urlopenclass UrlTemplate:def __init__(self, template):self.template = templatedef open(self, **kwargs):return urlopen(self.template.format_map(kwargs))# Example use. Download stock data from yahoo
yahoo = UrlTemplate('http://finance.yahoo.com/d/quotes.csv?s={names}&f={fields}')
for line in yahoo.open(names='IBM,AAPL,FB', fields='sl1c1v'):print(line.decode('utf-8'))

可以替换为:

def urltemplate(template):def opener(**kwargs):return urlopen(template.format_map(kwargs))return opener# Example use
yahoo = urltemplate('http://finance.yahoo.com/d/quotes.csv?s={names}&f={fields}')
for line in yahoo(names='IBM,AAPL,FB', fields='sl1c1v'):print(line.decode('utf-8'))

任何时候只要你碰到需要给某个函数增加额外的状态信息的问题,都可以考虑使用闭包。 相比将你的函数转换成一个类而言,闭包通常是一种更加简洁和优雅的方案。

2. 定义一个带参数的装饰器

假设你想写一个装饰器,给函数添加日志功能,当时允许用户指定日志的级别和其他的选项。 下面是这个装饰器的定义和使用示例:

from functools import wraps
import loggingdef logged(level, name=None, message=None):"""Add logging to a function. level is the logginglevel, name is the logger name, and message is thelog message. If name and message aren't specified,they default to the function's module and name."""def decorate(func):logname = name if name else func.__module__log = logging.getLogger(logname)logmsg = message if message else func.__name__@wraps(func)def wrapper(*args, **kwargs):log.log(level, logmsg)return func(*args, **kwargs)return wrapperreturn decorate

# Example use
@logged(logging.DEBUG)
def add(x, y):return x + y
def add(x, y):return x + yadd = logged(logging.DEBUG)(add)

logged() 接受参数并返回一个可调用对象,可调用对象接受一个函数作为参数并包装它.

python 装饰器 二相关推荐

  1. python 装饰器 二 (装饰带参数的函数)

    #!/usr/bin/env python #_*_coding=utf-8_*_ #Author: xieyixue #mail: xyx_0410@163.com #Created Time: 2 ...

  2. 【python 8】python 装饰器

    文章目录 一.什么是 python 装饰器 二.装饰器的使用 三.装饰器类型 3.1 特性装饰器 @property 3.2 类装饰器 @classmethod 3.3 静态装饰器 @staticme ...

  3. python装饰器与闭包_Python 装饰器和闭包

    Python 装饰器和闭包 装饰器是 Python 中常见的语法糖,这篇文章讲了闭包和装饰器的原理,并且分析了函数中变量的作用域,以及尝试总结了常见的坑. 装饰器基础 首先来看看装饰器的定义:装饰器本 ...

  4. python装饰器-Python基础-20装饰器

    20.装饰器 20.1 函数基础知识 在Python中函数为一等公民,我们可以: 把函数赋值给变量 在函数中定义函数 在函数中返回函数 把函数传递给函数 20.1.1 把函数赋值给变量 在Python ...

  5. python 装饰器 参数-[Python]写个带参数的装饰器

    上篇文章 Python装饰器为什么难理解?从函数到装饰器一步一步介绍了Python装饰器的来由,不知你对装饰器理解了没有,强烈建议你自己动手写个装饰器应用到项目中加深理解.装饰器可以很简单,也可以很复 ...

  6. python装饰器原理-深刻理解python装饰器

    我们要完全理解python装饰器,不是很容易,主要归结有如下困难: 1. 关于函数"变量"(或"变量"函数)的理解 2. 关于高阶函数的理解 3. 关于嵌套函数 ...

  7. python装饰器原理-python装饰器的原理和使用

    一.最简单的装饰器 装饰器是python中很基础也很实用的一个特性.通过装饰器我们可以很方便地为一些函数添加相同的功能.我们以测量函数运行时间为例来讲一讲python装饰器的运行原理. 1.使用装饰器 ...

  8. python装饰器原理-简单了解python装饰器原理及使用方法

    这篇文章主要介绍了简单了解python装饰器原理及使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 如果你接触 Python 有一段时间了的话 ...

  9. python装饰器实例-python装饰器实例大详解

    原标题:python装饰器实例大详解 一.作用域 在python中,作用域分为两种:全局作用域和局部作用域. 全局作用域是定义在文件级别的变量,函数名.而局部作用域,则是定义函数内部. 关于作用域,我 ...

  10. python装饰器-python装饰器简介---这一篇也许就够了(推荐)

    Python装饰器(decorator)是在程序开发中经常使用到的功能,合理使用装饰器,能让我们的程序如虎添翼. 装饰器引入 初期及问题诞生 假如现在在一个公司,有A B C三个业务部门,还有S一个基 ...

最新文章

  1. 【深度学习篇】--Windows 64下tensorflow-gpu安装到应用
  2. hdu1824 基础2sat
  3. 6、通过xpath获取网页数据
  4. SAP ABAP程序优化-多线程并行处理
  5. c运行库、c标准库、windows API都是什么玩意
  6. 【转】Android编程点滴(14) -- Android中资源文件夹res/raw和assets的使用
  7. MySQL笔记-查询进程列表(查客户端IP、使用的用户、当前状态、ID号、使用的库)及断开客户端连接
  8. 卸载KVM虚拟机(全、干净、彻底)
  9. 搜狐超越新浪给创业者的两个启示:不断+耐心布局
  10. servlet和action中获取URL中的汉字(解决URL中汉字为乱码的问题) .
  11. 《Nature》 和 《 Science》 的区别是什么?
  12. 论文排版LaTeX学习笔记
  13. script标签中的 defer 和 async 属性
  14. Spark 提交执行源码学习
  15. HDU-6148 Valley Numer(数位DP)
  16. java上机实验作业 编写汽车类car,Java代写:CS103 Car Rental代做留学生SQL实验作业...
  17. php 屏蔽 strict standards,PHP Strict Standards:问题解决
  18. 屏蔽 app 开屏广告,舒畅了
  19. 用paddleocr识别汉字_基于Paddle的截图OCR文字识别的实现
  20. system_process E/WindowManager: Starting window AppWindowToken

热门文章

  1. winsock 收发广播包
  2. (转)HDOJ 4006 The kth great number(优先队列)
  3. mysql安装运行(centos)
  4. 【转】Java重构-策略模式、状态模式、卫语句
  5. 日期Date和String/Long之间的转换
  6. PAT-乙级-1012. 数字分类 (20)
  7. lua定时器与定时任务的接口设计
  8. eclipse C/C++开发环境配置全过程
  9. STP-2-三个选择
  10. 四川信息职业技术学院2019考纲复习