所以我是业余程序员,我想做一些基于文本的黑客游戏的功能。在其中,将调用一个函数以允许玩家找到战利品等等。所以我正在进行一些“小规模测试”; 在我的测试过程中,我发现如果我有一个函数(在其中调用了一个不同的函数),然后一些文本被“打印”,第二个函数将首先被调用。
#Example using a sort of 'Decorator'.
def Decor(func):
print("================")
print("Hey there")
print("================")
print("")
func
def Hello():
print("And HELLO WORLD!")
decorated = Decor(Hello())
decorated
但输出总是如下:
And HELLO WORLD!
================
Hey there
================
有没有办法在打印文本后调用该函数? 或者只是延迟被调用的函数。 或者我是以错误的方式来做这件事的? 谢谢你的时间。
答案 0 :(得分:1)
此处的问题是您将Hello()
的结果传递给Decor
。这意味着将首先处理Hello()
,然后将结果作为参数传递给Decor
。你需要的是这样的东西
def Decor(func):
print("================")
print("Hey there")
print("================")
print("")
func()
def Hello():
print("And HELLO WORLD!")
decorated = Decor(Hello)
decorated
答案 1 :(得分:0)
这是在python中装饰函数的常用方法之一:
def Decor(func):
def new_func():
print("================")
print("Hey there")
print("================")
print("")
func()
return new_func
def Hello():
print("And HELLO WORLD!")
decorated = Decor(Hello)
decorated()
这样,在致电Decor
之前,您的Hello
和decorated()
函数中的语句才会被调用。
你也可以这样使用装饰器:
@Decor
def Hello():
print("And HELLO WORLD!")
Hello() # is now the decorated version.