python装饰器decorator问题

冷风1023 2018-09-28 04:13:50

def my_shiny_new_decorator(a_function_to_decorate):
def the_wrapper_around_the_original_function():
print ("Before the function runs")
a_function_to_decorate()
print ("After the function runs")
return the_wrapper_around_the_original_function

@my_shiny_new_decorator
def another_stand_alone_function():
print ("Leave me alone")
another_stand_alone_function() #这里输如下

#Before the function runs
#Leave me alone
#After the function runs

another_stand_alone_function() #这里的输出还是和上面一样,如果我只想要函数原来的输出,也就是只输出"Leave me alone",怎么做呢?是不是函数被装饰过就不能还原了呢?
...全文
304 6 打赏 收藏 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
冷风1023 2018-11-09
  • 打赏
  • 举报
回复
system.ini
冷风1023 2018-09-30
  • 打赏
  • 举报
回复
谢谢4楼,了解了。
混沌鳄鱼 2018-09-29
  • 打赏
  • 举报
回复
装饰器其实只是个语法糖而已,只是 func = decorator(func) 的简便写法,
而且装饰器是在编译阶段就被执行了,因此你说的恢复是不可能的。

如果你还想要保留原始函数只能在装饰前保留一个副本。



import copy

def my_shiny_new_decorator(a_function_to_decorate):
global original_function
original_function = copy.copy(a_function_to_decorate)
def the_wrapper_around_the_original_function():
print("Before the function runs")
a_function_to_decorate()
print("After the function runs")
return the_wrapper_around_the_original_function

def restore_func(a_function_to_restore):
a_function_to_restore = original_function
return a_function_to_restore


@my_shiny_new_decorator
def another_stand_alone_function():
print("Leave me alone")

another_stand_alone_function()

another_stand_alone_function = original_function

another_stand_alone_function() # 这里输如下

# Before the function runs
# Leave me alone
# After the function runs
# Leave me alone

冷风1023 2018-09-29
  • 打赏
  • 举报
回复
回复一楼,怎么去掉呢?我在用完装饰器后,怎么去掉装饰器呢
欢乐的小猪 2018-09-29
  • 打赏
  • 举报
回复
修饰器模式通常用于扩展一个对象的功能。
如果你原来的函数可以满足需求,不必使用装饰器。

Q:修饰器能否有参数?
Answer:可以有参数,例如这个例子True就返回被修饰的函数f,False返回不修饰的原函数。question02.py参考文献:https://pythonconquerstheuniverse.wordpress.com/2012/04/29/python-decorators/
空空夏花 2018-09-28
  • 打赏
  • 举报
回复
把装饰器去掉不就是原来的输出了
内容概要:本文围绕基于物理场的动态模式分解(piDMD)展开研究,重点探讨其在流体力学、热传导及多物理耦合系统中的建模与应用。通过Matlab代码实现,将传统的动态模式分解(DMD)方法与物理场控制方程相结合,引入物理约束以增强数据驱动模型的物理一致性,从而提升对复杂非线性系统的模态提取精度与长期预测能力。文章系统阐述了piDMD的理论基础、数学推导过程与算法实现步骤,并结合典型物理场仿真案例(如Navier-Stokes方程驱动的流场演化)进行验证,展示了其在降阶建模、主导模态识别和时空动态可视化方面的优越性能,适用于高维、强耦合、非平稳系统的分析与优化。; 适合人群:具备一定数值计算、流体力学、控制理论或数据驱动建模背景,熟悉Matlab编程与线性代数运算,从事科学研究、工程仿真或系统辨识工作的研究生、科研人员及工程师。; 使用场景及目标:①实现对流场、温度场等物理场的高效降阶建模与动态行为预测;②提取符合物理规律的关键模态,用于系统稳定性分析与控制设计;③支撑复杂系统的状态估计、异常检测与优化调控等下游任务。; 阅读建议:建议读者结合提供的Matlab代码逐行调试与运行,深入理解piDMD算法中物理约束的嵌入方式及其对模态质量的影响,同时可尝试将其迁移至其他偏微分方程描述的物理系统中进行拓展验证与应用。

37,737

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧