ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

装饰器案例 python

2022-04-28 14:02:22  阅读:126  来源: 互联网

标签:entrance return start python 案例 func print 装饰 def


一 装饰器

 作用是为了将一个子模块加入新的功能,但是不修改原有的代码

二 案例

def operate(func):
    
    def wrapper(*args, **kwargs):  # 闭包函数        
        value = func(*args, **kwargs)
        print(value, args, kwargs)
                
        return value    
    return wrapper


@operate
def start_func(count, second="yes"):
    count = count * 10
    print("这里是加了装饰器的函数 %d" %  count)
    
    return count
    
    
start_func(10, second="no") 

输出:

这里是加了装饰器的函数 100
100 (10,) {'second': 'no'}
100

  

 

 # 不含参数的装饰器

## 不含参数的装饰器

def jump_func(funcName):
    
    def build_in(a, b, c):   # 这个函数要与 start_entrance 函数参数一致
        
        b = "woman"
        print("-----before-----", a, b, c)
        change = funcName(a, b, c)
        print("-----after------", change)
        return change
    
    return build_in

@jump_func
def start_entrance(name, sex, age):
    
#     sex = "crazy"
#     age = 18
    print("stat func:", name, sex, age)
    return (name, sex, age)

result = start_entrance("honer", "man", 78)

输出:

-----before----- honer woman 78
stat func: honer woman 78
-----after------ ('honer', 'woman', 78)

  

有参数的装饰器

# 传递带有参数的装饰器,能在运行时,处理不同的功能
"""
1 先执行 trans_args("start") 函数,这个函数return 的结果是func这个函数的引用
2 @func
3 使用 @func 对start_entrance 进行装饰
"""


def trans_args(arg):
    
    def func(funcName):
        
        def build_in():
            if arg == "start":  # 装饰器里的参数
                result = funcName()
                print(result)
                return result
            else:
                result = funcName()
                return "not comparable"
            
            
        return build_in    
    return func


@trans_args("start")
def start_entrance():
    
    wrap = "嵌入其中的函数"
    print(wrap)
    return wrap

res = start_entrance()

@trans_args("from")
def from_entrance():
    variable = "hello, world"
    print(variable)
    return variable

from_entrance()

 输出:

嵌入其中的函数
嵌入其中的函数
hello, world
'not comparable'

 

  

 

 

标签:entrance,return,start,python,案例,func,print,装饰,def
来源: https://www.cnblogs.com/qianyuesheng/p/16195615.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有