zoukankan      html  css  js  c++  java
  • 装饰器函数

    def log(text):
    def deroctor(func):
    def wrapper(*args, **kw):
    print('ppp')
    print(text)
    return func(*args, **kw)
    return wrapper()
    return deroctor



    @log('sssssss')
    def now(a,b,c,d):
    print(a+b+c+d)

    now(3,4,5,6)

    这种在代码运行期间动态增加函数功能的方式,称之为“装饰器”(Decorator)。

    decorator,传入一个函数(这个函数就是他要装饰的函数。默认函数名是func)作为参数,并返回一个函数对象

    @log放到now()函数的定义处,相当于执行了语句:now = log(text)   把装饰器赋给了一个跟要装饰的函数名称同名的变量

    由于log()是一个decorator,返回一个函数对象,同名now变量指向了新的函数对象(deroctor),于是调用now()将执行新函数,即在log()函数中返回的deroctor对象。

    wrapper()函数的参数定义是(*args, **kw),是提供给func函数定义参数。

    它们是可变参数

    如果我们不确定要往函数func中传入多少个参数,或者我们想往函数中以列表和元组的形式传参数时,那就使要用*args;
    如果我们不知道要往函数func中传入多少个关键词参数,或者想传入字典作为关键词参数时,那就要使用**kwargs。

  • 相关阅读:
    JAVA程序员面试32问
    在做物流的库存管理系统里,需要注意。。。。。
    在写自动更新程序中出现的问题
    数据库设计中的五个范式
    cPickle / pickle
    python总结1
    python总结2
    汉明距离(Hamming distance)
    python中pickle的用法
    NET面试题
  • 原文地址:https://www.cnblogs.com/yzwdcjs/p/14658756.html
Copyright © 2011-2022 走看看