带有参数的装饰器
一个带有参数的装饰器的例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | def decrator( * dargs, * * dkargs): def wrapper(func): def _wrapper( * args, * * kargs): print "decrator param:" , dargs, dkargs print "function param:" , args, kargs return func( * args, * * kargs) return _wrapper return wrapper @decrator ( 1 , a = 2 ) def foo(x, y = 0 ): print "foo" , x, y foo( 3 , y = 4 ) # 输出: # decrator param: (1,) {'a': 2} # function param: (3,) {'y': 4} # foo 3 4 |
bottle.py中自动转换参数类型的装饰器:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | def validate( * * vkargs): def decorator(func): def wrapper( * * kargs): for key in vkargs: # 根据vkargs中的参数的类型对kargs的参数进行类型转换 kargs[key] = vkargs[key](kargs[key]) return func( * * kargs) return wrapper return decorator @validate ( id = int , x = float , y = float ) def move( id , x, y): print "move %d (%0.2f, %0.2f)" % ( id , x, y) move( id = "1" , x = "0.2" , y = "0.3" ) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2013-02-06 [深入Python]Alex Martelli的Borg类
2013-02-06 python中查看变量的内存地址
2013-02-06 Python进阶目录