前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >简单讲讲python装饰器

简单讲讲python装饰器

作者头像
生信编程日常
发布2020-04-09 15:49:56
2940
发布2020-04-09 15:49:56
举报

装饰器其实是闭包的一种,如果有重复功能需要实现的话,装饰器是个不错的选择。比如每个函数需要添加一个提示开始的功能:

代码语言:javascript
复制
def start(func):
    
    def wrapper():
        print("Now function {} starts!".format(func.__name__))
        return func()
    return wrapper

def greet():
    print("Hello, everyone!")
    
def morning():
    print("Good Morning!")

greet = start(greet)
greet()

morning = start(morning)
morning()

我们需要这两个函数的开始的提醒,这样写可以避免在greet和morning函数中重复的写

代码语言:javascript
复制
print("Now function {} starts!".format(func.__name__))

这句话,不过这样写还可以进一步省略,即:

代码语言:javascript
复制
def start(func):
    
    def wrapper():
        print("Now function {} starts!".format(func.__name__))
        return func()
    return wrapper
@start
def greet():
    print("Hello, everyone!")
    
@start
def morning():
    print("Good Morning!")

greet()
morning()

如果function需要参数的话可以用*args和**kwargs:

代码语言:javascript
复制
def start(func):
    
    def wrapper(*args, **kwargs):
        print("Now function {} starts!".format(func.__name__))
        return func(*args, **kwargs)
    return wrapper

@start
def greet(name):
    print("Hello, {}!".format(name))
    
@start
def morning(name):
    print("Good Morning, {}!".format(name))

greet('Kura')
morning('Kura')

返回: Now function greet starts! Hello, Kura! Now function morning starts! Good Morning, Kura!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档