装饰器
# @wraps
def decorator ( func) :
"""this is decorator __doc__"""
def wrapper ( * args, ** kwargs) :
"""this is wrapper __doc__"""
print ( "this is wrapper method" )
return func( * args, ** kwargs)
return wrapper
@decorator
def test ( ) :
"""this is test __doc__"""
print ( "this is test method" )
if __name__ == '__main__' :
print ( "__name__: " , test. __name__)
print ( "__doc__: " , test. __doc__)
"""
__name__: wrapper
__doc__: this is wrapper __doc__
"""
def decorator ( func) :
"""this is decorator __doc__"""
@wraps ( func)
def wrapper ( * args, ** kwargs) :
"""this is wrapper __doc__"""
print ( "this is wrapper method" )
return func( * args, ** kwargs)
return wrapper
@decorator
def test ( ) :
"""this is test __doc__"""
print ( "this is test method" )
if __name__ == '__main__' :
print ( "__name__: " , test. __name__)
print ( "__doc__: " , test. __doc__)
"""
__name__: test
__doc__: this is test __doc__
"""
# 装饰函数
## 无参数
d e c o r a t e ( f u n ) ( 1 , 2 , c = 3 ) == > i n n e r ( 1 , 2 , c = 3 ) d e c o r a t e ( f u n ) ( 1 , 2 , c = 3 ) ==> i n n e r ( 1 , 2 , c = 3 )
def decorate ( fn) :
print ( "-decorate() start" )
@functools. wraps ( fn)
def inner ( * args, ** kwargs) :
print ( "--inner() start" )
print ( f'--inner: args== { args} , kwargs== { kwargs} ' )
fn( * args, ** kwargs)
print ( "--inner() end" )
print ( "-decorate() end" )
return inner
@decorate
def fun ( a, b, c) :
print ( "----fun() start" )
print ( f'----fun: a== { a} , b== { b} , c== { c} ' )
print ( "----fun() end" )
if __name__ == '__main__' :
print ( '-main() start' )
fun( 1 , 2 , c= 3 )
print ( '-main() end' )
"""
-decorate() start
-decorate() end
-main() start
--inner() start
--inner: args==(1, 2), kwargs=={'c': 3}
----fun() start
----fun: a==1, b==2, c==3
----fun() end
--inner() end
-main() end
"""
## 有参数
d e c o r a t e ( − 1 , − 2 , − 3 ) f u n ( 1 , 2 , c = 3 ) == > w r a p ( f u n ) ( 1 , 2 , c = 3 ) == > i n n e r ( 1 , 2 , c = 3 ) d e c o r a t e ( − 1 , − 2 , − 3 ) f u n ( 1 , 2 , c = 3 ) ==> w r a p ( f u n ) ( 1 , 2 , c = 3 ) ==> i n n e r ( 1 , 2 , c = 3 )
def decorate ( a, b, c) :
print ( '-decorate() start' )
def wrap ( fn) :
print ( '-wrap() start' )
print ( f'-warp: a== { a} , b== { b} , c== { c} ' )
@functools. wraps ( fn)
def inner ( * args, ** kwargs) :
print ( "--inner() start" )
print ( f'--inner: a== { a} , b== { b} , c== { c} ' )
print ( f'--inner: args== { args} , kwargs== { kwargs} ' )
fn( * args, ** kwargs)
print ( "--inner() end" )
print ( '-wrap() end' )
return inner
print ( '-decorate() end' )
return wrap
@decorate ( - 1 , - 2 , - 3 )
def fun ( a, b, c) :
print ( "----fun() start" )
print ( f'----fun: a== { a} , b== { b} , c== { c} ' )
print ( "----fun() end" )
if __name__ == '__main__' :
print ( '-main() start' )
fun( 1 , 2 , c= 3 )
print ( '-main() end' )
"""
-decorate() start
-decorate() end
-wrap() start
-warp: a==-1, b==-2, c==-3
-wrap() end
-main() start
--inner() start
--inner: a==-1, b==-2, c==-3
--inner: args==(1, 2), kwargs=={'c': 3}
----fun() start
----fun: a==1, b==2, c==3
----fun() end
--inner() end
-main() end
"""
# 装饰类
## 无参数
d e c o r a t e ( A ) ( 1 , 2 , c = 3 ) == > i n n e r ( 1 , 2 , c = 3 ) d e c o r a t e ( A ) ( 1 , 2 , c = 3 ) ==> i n n e r ( 1 , 2 , c = 3 )
def decorate ( cls) :
print ( '-decorate() start' )
@functools. wraps ( cls)
def inner ( * args, ** kwargs) :
print ( "--inner() start" )
print ( f'--inner: args== { args} , kwargs== { kwargs} ' )
print ( "--inner() end" )
return cls( * args, ** kwargs)
print ( '-decorate() end' )
return inner
@decorate
class A :
def __init__ ( self, a, b, c) :
self. a = a
self. b = b
self. c = c
if __name__ == '__main__' :
print ( '-main() start' )
a = A( 1 , 2 , c= 3 )
print ( '-main() end' )
"""
-decorate() start
-decorate() end
-main() start
--inner() start
--inner: args==(1, 2), kwargs=={'c': 3}
--inner() end
-main() end
"""
## 有参数
d e c o r a t e ( − 1 , − 2 , − 3 ) A ( 1 , 2 , c = 3 ) == > w r a p ( A ) ( 1 , 2 , c = 3 ) == > i n n e r ( 1 , 2 , c = 3 ) d e c o r a t e ( − 1 , − 2 , − 3 ) A ( 1 , 2 , c = 3 ) ==> w r a p ( A ) ( 1 , 2 , c = 3 ) ==> i n n e r ( 1 , 2 , c = 3 )
def decorate ( a, b, c) :
print ( '-decorate() start' )
def wrap ( cls) :
print ( '-wrap() start' )
print ( f'-warp: a== { a} , b== { b} , c== { c} ' )
@functools. wraps ( cls)
def inner ( * args, ** kwargs) :
print ( "--inner() start" )
print ( f'--inner: a== { a} , b== { b} , c== { c} ' )
print ( f'--inner: args== { args} , kwargs== { kwargs} ' )
print ( "--inner() end" )
return cls( * args, ** kwargs)
print ( '-wrap() end' )
return inner
print ( '-decorate() end' )
return wrap
@decorate ( - 1 , - 2 , - 3 )
class A :
def __init__ ( self, a, b, c) :
self. a = a
self. b = b
self. c = c
if __name__ == '__main__' :
print ( '-main() start' )
a = A( 1 , 2 , c= 3 )
print ( '-main() end' )
"""
-decorate() start
-decorate() end
-wrap() start
-warp: a==-1, b==-2, c==-3
-wrap() end
-main() start
--inner() start
--inner: a==-1, b==-2, c==-3
--inner: args==(1, 2), kwargs=={'c': 3}
--inner() end
-main() end
"""
# 有无括号
d e c o r a t e ( ) f u n ( 1 , 2 , c = 3 ) == > i n n e r ( f u n ) ( 1 , 2 , c = 3 ) == > f u n ( 1 , 2 , c = 3 ) d e c o r a t e ( ) f u n ( 1 , 2 , c = 3 ) ==> i n n e r ( f u n ) ( 1 , 2 , c = 3 ) ==> f u n ( 1 , 2 , c = 3 )
def decorate ( ) :
print ( "-decorate() start" )
def inner ( fn) :
print ( "--inner() start" )
print ( "--inner() end" )
return fn
print ( "-decorate() end" )
return inner
@decorate ( )
def fun ( a, b, c) :
print ( "----fun() start" )
print ( f'----fun: a== { a} , b== { b} , c== { c} ' )
print ( "----fun() end" )
if __name__ == '__main__' :
print ( '-main() start' )
fun( 1 , 2 , c= 3 )
print ( '-main() end' )
"""
-decorate() start
-decorate() end
--inner() start
--inner() end
-main() start
----fun() start
----fun: a==1, b==2, c==3
----fun() end
-main() end
"""
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2020-02-10 2020牛客寒假算法基础集训营1 umi和弓道
2020-02-10 2020牛客寒假算法基础集训营1 maki和tree