亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

python筆記--裝飾器

標簽:
Python

装饰器                                                                                                                 

    装饰器作用就是为已定义的函数添加功能,并不修改原有函数的代码,高阶函数和闭包结合使用就可以形成装饰器。简单举例说明:


#-*- coding:utf-8 -*-#假如我们有多个函数需要执行,但是执行前需要手工确认import sysdef my_print():    print ("this is a test!") def confirm(f):    def inner():        my_confirm=input("是否继续yes/no:")        if my_confirm == 'yes':            f()        else:            sys.exit()    return inner my_print=confirm(my_print)my_print()

    python支持一种友好的写法,可以省去再次定义原来的函数:


#-*- coding:utf-8 -*-import sysdef confirm(f):    def inner():        my_confirm=input("是否继续yes/no:")        if my_confirm == 'yes':            f()        else:            sys.exit()    return inner @confirm    #在需要调用判断功能的函数前加@def my_print():       print ("this is a test!") my_print()

    如果被装饰的功能函数有参数,在装饰器内部也要添加对应的参数,简单举例说明:


#-*- coding:utf-8 -*-#装饰器之功能函数加参数import sys def confirm(f):    def inner(*x,**y):        my_confirm=input("是否继续yes/no:")        if my_confirm == 'yes':            f(*x,**y)    #注意f和inner的参数要一一对应        else:            sys.exit()    return inner @confirm    def my_sum(*a,**b):    result=0    for in a:        result+=i    print(result) my_sum(1,2,3,4,5)

    如果再为装饰器添加一个功能,并且装饰器可以传参,只需要在原有装饰器外部再添加一层嵌套函数,简单举例说明:


#-*- coding:utf-8 -*-import sysdef judge(default=0):    def confirm(f):        def inner(*x,**y):            my_confirm=input("是否继续yes/no:")            if my_confirm == 'yes':                print(f(*x,**y))                if f(*x,**y) > int(default):                    print('more')                else:                    print('less')            else:                sys.exit()        return inner    return confirm @judge(10)def my_sum(*a,**b):    result=0    for in a:        result+=i    return(result)     my_sum(1,2,3,4,5)


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消