美文网首页
python元编程详解(1)

python元编程详解(1)

作者: KillerManA | 来源:发表于2016-04-10 16:35 被阅读1008次

1.python元编程是什么?

软件开发中很重要的一条原则就是“不要重复自己的工作(Don't repeat youself)”,也就是说当我们需要复制粘贴代码时候,通常都需要寻找一个更加优雅的解决方案,在python中,这类问题常常会归类为“元编程”。
主要目的:是创建函数和类,并用他们操作代码(例如修改,生成,或者包装自己已有的代码)。
python中基于这个目的的主要特性包括:装饰器,类装饰器,元类。这篇文章带大家一起讨论各种元编程技术。
2.元编程应用:


(1):如何给函数添加一个包装?

这里就用到我们常用的特性:装饰器函数,用来解决给函数加上一种特定的修饰方法来达到自己想要的效果。如:日志记录,时间统计等。

# coding=utf8
import time 
from functools import wraps
def timethis(func):
   @wraps(func) 
   def wrapper(*args, **kwargs):
        start = time.time()
        result = func(*args, **kwargs)
        end = time.time()
        print(func.__name__, end - start)
        return result
    return wrapper
@timethis
def countdown(n):
    """统计时间
    :param n
    :n:return
    :no
    """
    while n > 0:
        n -= 1
if __name__ == "__main__":
    countdown(3000000)
    print(countdown.__name__)
    print(countdown.__doc__)
    print(countdown)

这是一个简单的例子,用来统计函数的循环时间,比较简单,但是这也充分的说明了装饰器的作用:
装饰器就是一个函数,接受一个函数作为参数,并且返回一个新的函数作为输出。.
现在来看一下timethis函数:
这个函数的作用就是接受一个函数,在函数内部对接受的函数进行修改并输出新的函数,这里比较重要的一点就是我们要用args和kwargs来接受任何形式的参数,正如我们这里的wapper函数一样,它可以将timethis传递进来的参数全部接受。
这里面还有一个最容易忽略,但是又特别重要的一点:
我们在编写wapper函数时,对其添加了修饰
@wraps(func)*, 这个很重要,它的作用是可以保留函数的元数据,接下来为大家补充一些重要的细节问题。

2.装饰器如何保存函数的元数据?

我们来运行一下刚才编写的例子:

Paste_Image.png

我们再来将wapper函数的装饰器去掉执行:

Paste_Image.png

这里可以清晰的看出对比结果,在我们添加wapper函数添加修饰后,保留的原来函数的元数据。这点请大家牢记!在编写装饰器的时候容易忽略这个细节,导致结果不对。

相关文章

  • python元编程详解

    注:采转归档,自己学习查询使用 python元编程详解(1)python元编程详解(2)python元编程详解(3...

  • python元编程详解(1)

    1.python元编程是什么? 软件开发中很重要的一条原则就是“不要重复自己的工作(Don't repeat yo...

  • 2017年书单

    《汇编语言》 《TCP/IP详解 卷1:协议》 《python核心编程》

  • python元编程详解

    一、元编程的概念 元编程依赖于python的一个叫做元类的概念。元类就是当你的某段代码在被执行的过程中,另外一段代...

  • python元编程详解

    什么是元编程 软件开发中很重要的一条原则就是“不要重复自己的工作(Don’t repeat youself)”,也...

  • python元编程详解(3)

    今天转载一片非常精彩的文章供大家欣赏:参考文章链接.python开发者门户一个很好的学习python的网站,大家有...

  • python元编程详解(2)

    如何对装饰器进行解包? 上一章,我们对函数进行装饰,但是有时候我们又想撤销这个函数的修饰,直接访问那个没有被修饰的...

  • python元编程详解(4)

    上一篇文章我们详细解释了如何利用元类来控制类的创建,下面我们利用元类来控制实例的创建:在此之前我们先来理解一下py...

  • Python高阶(四) - Socket编程

    [TOC] Python Socket 编程详解 Python 提供了两个基本的 socket 模块: Socke...

  • Python编程入门——基础语法详解

    今天小编给大家带来Python编程入门——基础语法详解。 一、基本概念 1.内置的变量类型: Python是有变量...

网友评论

      本文标题:python元编程详解(1)

      本文链接:https://www.haomeiwen.com/subject/efwblttx.html