精华内容
下载资源
问答
  • python函数修饰符@的作用是为现有函数增加额外的功能,常用于插入日志、性能测试、事务处理等等。创建函数修饰符的规则:(1)修饰符是一个函数(2)修饰符取被修饰函数为参数(3)修饰符返回一个新函数(4)修饰符...

    python函数修饰符@的作用是为现有函数增加额外的功能,常用于插入日志、性能测试、事务处理等等。

    创建函数修饰符的规则:

    (1)修饰符是一个函数

    (2)修饰符取被修饰函数为参数

    (3)修饰符返回一个新函数

    (4)修饰符维护被维护函数的签名

    例子1:被修饰函数不带参数

    deflog(func):defwrapper():print('log开始 ...')

    func()print('log结束 ...')returnwrapper

    @logdeftest():print('test ..')

    test()

    运行结果:

    log开始 ...

    test ..

    log结束 ...

    例子2:使用functools模块提供的修改函数属性的方法wraps

    deflog(func):defwrapper():print('log开始 ...')

    func()print('log结束 ...')returnwrapper

    @logdeftest1():print('test1 ..')deftest2():print('test2 ..')print(test1.__name__)print(test2.__name__)

    运行结果:

    wrapper

    test2

    可见test1的函数名称变了,如果某些代码用到就会出问题,可以使用functools模块提供的修改函数属性的方法wraps

    from functools importwrapsdeflog(func):

    @wraps(func)defwrapper():print('log开始 ...')

    func()print('log结束 ...')returnwrapper

    @logdeftest1():print('test1 ..')deftest2():print('test2 ..')print(test1.__name__)print(test2.__name__)

    运行结果:

    test1

    test2

    例子3:被修饰函数带参数

    from functools importwrapsdeflog(func):

    @wraps(func)def wrapper(*args,**kwargs):print('log开始 ...',func.__name__)

    ret= func(*args,**kwargs)print('log结束 ...')returnretreturnwrapper

    @logdeftest1(s):print('test1 ..', s)returns

    @logdeftest2(s1, s2):print('test2 ..', s1, s2)return s1 +s2

    test1('a')

    test2('a','bc')

    运行结果:

    log开始 ... test1

    test1 .. a

    log结束 ...

    log开始 ... test2

    test2 .. a bc

    log结束 ...

    例子4:修饰符带参数,需要比上面例子多一层包装

    from functools importwrapsdeflog(arg):def_log(func):

    @wraps(func)def wrapper(*args,**kwargs):print('log开始 ...',func.__name__, arg)

    ret= func(*args,**kwargs)print('log结束 ...')returnretreturnwrapperreturn_log

    @log('module1')deftest1(s):print('test1 ..', s)returns

    @log('module1')deftest2(s1, s2):print('test2 ..', s1, s2)return s1 +s2

    test1('a')

    test2('a','bc')

    运行结果:

    log开始 ... test1 module1

    test1 .. a

    log结束 ...

    log开始 ... test2 module1

    test2 .. a bc

    log结束 ...

    展开全文
  • python函数修饰符@的作用是为现有函数增加额外的功能,常用于插入日志、性能测试、事务处理等等。创建函数修饰符的规则:(1)修饰符是一个函数(2)修饰符取被修饰函数为参数(3)修饰符返回一个新函数(4)修饰符...

    python函数修饰符@的作用是为现有函数增加额外的功能,常用于插入日志、性能测试、事务处理等等。

    创建函数修饰符的规则:

    (1)修饰符是一个函数

    (2)修饰符取被修饰函数为参数

    (3)修饰符返回一个新函数

    (4)修饰符维护被维护函数的签名

    例子1:被修饰函数不带参数

    def log(func):

    def wrapper():

    print('log开始 ...')

    func()

    print('log结束 ...')

    return wrapper

    @log

    def test():

    print('test ..')

    test()

    运行结果:

    log开始 ...

    test ..

    log结束 ...

    例子2:使用functools模块提供的修改函数属性的方法wraps

    def log(func):

    def wrapper():

    print('log开始 ...')

    func()

    print('log结束 ...')

    return wrapper

    @log

    def test1():

    print('test1 ..')

    def test2():

    print('test2 ..')

    print(test1.__name__)

    print(test2.__name__)

    运行结果:

    wrapper

    test2

    可见test1的函数名称变了,如果某些代码用到就会出问题,可以使用functools模块提供的修改函数属性的方法wraps

    from functools import wraps

    def log(func):

    @wraps(func)

    def wrapper():

    print('log开始 ...')

    func()

    print('log结束 ...')

    return wrapper

    @log

    def test1():

    print('test1 ..')

    def test2():

    print('test2 ..')

    print(test1.__name__)

    print(test2.__name__)

    运行结果:

    test1

    test2

    例子3:被修饰函数带参数

    from functools import wraps

    def log(func):

    @wraps(func)

    def wrapper(*args,**kwargs):

    print('log开始 ...',func.__name__)

    ret = func(*args,**kwargs)

    print('log结束 ...')

    return ret

    return wrapper

    @log

    def test1(s):

    print('test1 ..', s)

    return s

    @log

    def test2(s1, s2):

    print('test2 ..', s1, s2)

    return s1 + s2

    test1('a')

    test2('a','bc')

    运行结果:

    log开始 ... test1

    test1 .. a

    log结束 ...

    log开始 ... test2

    test2 .. a bc

    log结束 ...

    例子4:修饰符带参数,需要比上面例子多一层包装

    from functools import wraps

    def log(arg):

    def _log(func):

    @wraps(func)

    def wrapper(*args,**kwargs):

    print('log开始 ...',func.__name__, arg)

    ret = func(*args,**kwargs)

    print('log结束 ...')

    return ret

    return wrapper

    return _log

    @log('module1')

    def test1(s):

    print('test1 ..', s)

    return s

    @log('module1')

    def test2(s1, s2):

    print('test2 ..', s1, s2)

    return s1 + s2

    test1('a')

    test2('a','bc')

    运行结果:

    log开始 ... test1 module1

    test1 .. a

    log结束 ...

    log开始 ... test2 module1

    test2 .. a bc

    log结束 ...

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

    本文标题: python函数修饰符@的使用方法解析

    本文地址: http://www.cppcns.com/jiaoben/python/271482.html

    展开全文
  • Python函数修饰符(装饰器)的使用1.修饰符的来源修饰符是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。修饰符是解决这类问题的绝佳设计,有了修饰符,我们就...

    Python函数修饰符(装饰器)的使用

    1.修饰符的来源

    修饰符是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。

    修饰符是解决这类问题的绝佳设计,有了修饰符,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用。概括的讲,修饰符的作用就是为已经存在的对象添加额外的功能。

    如下:

    import time

    def

    timeslong(func):

    start = time.clock()

    print("It's time starting ! ")

    func()

    print("It's time ending ! ")

    end = time.clock()

    return "It's used : %s ." % (end - start).

    上面的程序中,定义了一个函数,对另外一个对象的运行时间进行计算,如果采用通常的方式需要将 func() 重新在 timeslong 中重新写一遍。为了简化这种操作,便提出了修饰符的概念。

    如下:

    import time

    def

    timeslong(func):

    def call():

    start = time.clock()

    print("It's time starting ! ")

    func()

    print("It's time ending ! ")

    end = time.clock()

    10. return "It's used : %s ." % (end -

    start)

    return call

    13. @timeslong

    14. def f():

    15.

    y = 0

    16.

    for i in range(10):

    17.

    y = y + i + 1

    18.

    print(y)

    19.

    return y

    21. print(f())

    这样出现便不用再函数内部再进行嵌入函数,通过 @timeslong 对其进行修饰达到目的,是整个代码美观,而且少些部分代码

    修饰符也可以通过类来进行使用,共享该类,如下为一个实例:

    class

    timeslong(object):

    def

    __init__(self,func):

    self.f = func

    def

    __call__(self):

    start = time.clock()

    print("It's time starting ! ")

    self.f()

    print("It's time ending ! ")

    end = time.clock()

    return "It's used : %s ." % (end - start)

    12. @timeslong

    13. def f():

    14.

    y = 0

    15.

    for i in range(10):

    16.

    y = y + i + 1

    17.

    print(y)

    18.

    return y

    20. print(f())

    2. Python内置的修饰符

    内置的修饰符有三个,分别是staticmethod、classmethod 和 property,作用分别是把类中定义的实例方法变成静态方法、类方法和类属性。由于模块里可以定义函数,所以静态方法和类方法的用处并不是太多。

    class

    Hello(object):

    def __init__:

    ...

    @classmethod

    def

    print_hello(cls):

    print("Hello")

    classmethod 修饰过后,print_hello() 就变成了类方法,可以直接通过 Hello.print_hello() 调用,而无需绑定实例对象了。

    python函数修饰符@的使用

    python函数修饰符@的作用是为现有函数增加额外的功能,常用于插入日志.性能测试.事务处理等等. 创建函数修饰符的规则:(1)修饰符是一个函数(2)修饰符取被修饰函数为参数(3)修饰符返回一个新函数 ...

    Python函数篇:装饰器

    装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理. ...

    python函数与方法装饰器

    之前用python简单写了一下斐波那契数列的递归实现(如下),发现运行速度很慢. def fib_direct(n): assert n > 0, 'invalid n' if n < 3 ...

    python函数学习之装饰器

    装饰器 装饰器的本质是一个python函数,它的作用是在不对原函数做任何修改的同时,给函数添加一定的功能.装饰器的返回值也是一个函数对象. 分类: 1.不带参数的装饰器函数: def wrapper( ...

    python函数:叠加装饰器、迭代器、自定义迭代器、生成式

    一.叠加多个装饰器二.迭代器三.自定义迭代器四.xxx生成式 一.叠加多个装饰器 # 加载装饰器就是将原函数名偷梁换柱成了装饰器最内层那个wrapper函数 # 在加载完毕后,调用原函数其实就是在调用 ...

    python 函数基础及装饰器

    没有参数的函数及return操作 def test1(): print ("welcome") def test2(): print ("welcomt test2&qu ...

    python函数修饰器&lpar;decorator&rpar;

    python语言本身具有丰富的功能和表达语法,其中修饰器是一个非常有用的功能.在设计模式中,decorator能够在无需直接使用子类的方式来动态地修正一个函数,类或者类的方法的功能.当你希望在不修改函 ...

    python学习笔记&lpar;五&rpar;&colon;装饰器、生成器、内置函数、json

    一.装饰器 装饰器,这个器就是函数的意思,连起来,就是装饰函数,装饰器本身也是一个函数,它的作用是用来给其他函数添加新功能,比如说,我以前写了很多代码,系统已经上线了,但是性能比较不好,现在想把程序里 ...

    python笔记5:装饰器、内置函数、json

    装饰器 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象. 先看简单例子: def run(): time.sleep(1 ...

    随机推荐

    OFBIZ安装

    1. 安装SVN客户端,从Apache OFBiz Source Repository获取OFBIZ下载地址.此处以12.04为例,下载地址为http://svn.apache.org/repos/a ...

    placeholder 兼容 IE

    placeholder 是 html5 的新属性,仅支持 html5 的浏览器才支持 placeholder,目前最新的 FF.Chrome.Safari.Opera 以及 IE10 都支持,IE6- ...

    Mac&plus;IPAD上使用wireshark抓包

    首先先下载wireshark和Xquartz wireshark地址: http://www.wireshark.org/download.html Xquartz 地址:http://xquartz ...

    python安装pip

    pip类似RedHat里面的yum,安装Python包非常方便.本节详细介绍pip的安装.以及使用方法. 1.pip下载安装 1.1 pip下载 # wget "https://pypi.p ...

    Python数据分析中 DataFrame axis&equals;0&lpar;0轴&rpar;与axis&equals;1&lpar;1轴&rpar;的理解

    python中的axis究竟是如何定义的呢?他们究竟代表是DataFrame的行还是列? 直接上代码people=DataFrame(np.random.randn(5,5), columns=['a ...

    qsc oj 22 哗啦啦村的刁难&lpar;3&rpar;&lpar;随机数,神题&rpar;

    哗啦啦村的刁难(3) 发布时间: 2017年2月28日 20:00   最后更新: 2017年2月28日 20:01   时间限制: 1000ms   内存限制: 128M 描述 哗啦啦村作为喵哈哈村 ...

    weblogic弱密码检测

    http://www.secbox.cn/hacker/tools/6252.html http://60.12.168.73:8088/console/login/LoginForm.jsp htt ...

    在Eclipse下搭建Hibernate框架(加载hibernate工具插件,离线)

    下载hibernate工具包完成之后,对其进行解压可以得到众多文件夹,其中就有一个jbosstools-hibernate开头的文件夹,进入其中可以得到features和plugins两个文件夹,在E ...

    UEBA 学术界研究现状——用户行为异常检测思路:序列挖掘prefixspan,HMM,LSTM&sol;CNN,SVM异常检测,聚类CURE算法

    论文 技术分析<关于网络分层信息泄漏点快速检测仿真> "1.基于动态阈值的泄露点快速检测方法,采样Mallat算法对网络分层信息的离散采样数据进行离散小波变换;利用滑动窗口对该尺 ...

    GIT 管理修改、删除文件

    管理修改 现在,假定你已经完全掌握了暂存区的概念.下面,我们要讨论的就是,为什么Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件. 你会问,什么是修改?比如你新增了一行,这就 ...

    展开全文
  • 主要介绍了python函数修饰符@的使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • python函数修饰符@

    2021-05-14 21:41:15
    1.python函数修饰符@的使用 - gdjlc - 博客园 (cnblogs.com) 2.Python @函数装饰器及用法(超级详细) (biancheng.net) 总结 带参的函数修饰器:在修饰函数内继续嵌套函数,嵌套函数以def func(*args,**kwargs)...

    原文链接

    1.python函数修饰符@的使用 - gdjlc - 博客园 (cnblogs.com)

    2.Python @函数装饰器及用法(超级详细) (biancheng.net)

    总结

    1. 带参的函数修饰器:在修饰函数内继续嵌套函数,嵌套函数以def func(*args,**kwargs)的形式出现

    2. 在修饰函数内部的返回值就是被修饰函数的返回值

    3. 被修饰函数的.__name__属性会变成修饰函数的嵌套函数的.__name__。要防止修改,需要from functools import wraps,对修饰函数的嵌套函数使用函数修饰符@wraps(func)

    4. 修饰符带参数

    def funcB(arg):
        def funcC(funcA):
            @wraps(funcA)
            def funcD(*args,**kwargs):
                pass
    
    @funcB(arg)
    def funcA():
        pass

    arg就是参数,funcA是原函数

    展开全文
  • python函数修饰符@总结

    千次阅读 2018-09-06 11:19:37
    Python函数修饰符:”@”。通过decorator装饰器模式,使得代码更简单。 1)函数必须先定义再修饰 2)修饰符”@”后面必须是之前定义的某一个函数 3)每个函数只能有一个修饰符   常规修饰符 除去某些特定字符...
  • python函数修饰符@的作用是为现有函数增加额外的功能,常用于插入日志、性能测试、事务处理等等。 创建函数修饰符的规则: (1)修饰符是一个函数 (2)修饰符取被修饰函数为参数 (3)修饰符返回一个新函数 (4)...
  • python 函数修饰符@

    2020-04-21 22:57:34
    python 函数修饰符@ @可以使用一个函数(包装函数,wrapper function)替换另一个函数(被包装函数, wrapped function),例如: def log(func): def wrapper_fn(): print('log开始 ...') func() print('log结束 ...
  • python函数修饰符@的作用是为现有函数增加额外的功能,常用于插入日志、性能测试、事务处理等等。 创建函数修饰符的规则: (1)修饰符是一个函数 (2)修饰符取被修饰函数为参数 (3)修饰符返回一个新函数 (4)...
  • Python 函数修饰符(装饰器)的使用 1.修饰符的来源修饰符是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。 修饰符是解决这类问题的绝佳设计,有了修饰符,...
  • Python 函数修饰符(装饰器)的学习 import time class Test: def __init__(self): self.name='' self.functionDict = {} def msg_register(self, msgType, isFriendChat=False, isGroup
  • Python 函数修饰符的一些理解

    千次阅读 2017-07-04 23:33:43
    函数修饰符,这个东西在Python中困扰了我很久,网上查的资料也是乱七八糟的,今天特意花了点时间整理了一下。写这篇文章的目的,1.为了让自己留下更为深刻的印象;2.给对函数修饰符不太了解的学者一些借鉴吧我把函数...
  • 一点对于函数修饰符的初步理解,不对欢迎指正
  • class Student: @property def thisisstaticmethod(): print("hello world!") Student.thisisstaticmethod

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,750
精华内容 7,900
关键字:

python函数修饰符

python 订阅