延迟函数调用 - Python

时间:2017-07-25 08:16:06

标签: function python-3.6

所以我是业余程序员,我想做一些基于文本的黑客游戏的功能。在其中,将调用一个函数以允许玩家找到战利品等等。所以我正在进行一些“小规模测试”;  在我的测试过程中,我发现如果我有一个函数(在其中调用了一个不同的函数),然后一些文本被“打印”,第二个函数将首先被调用。

#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
================

有没有办法在打印文本后调用该函数? 或者只是延迟被调用的函数。 或者我是以错误的方式来做这件事的? 谢谢你的时间。

2 个答案:

答案 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之前,您的Hellodecorated()函数中的语句才会被调用。

你也可以这样使用装饰器:

@Decor
def Hello():
    print("And HELLO WORLD!")

Hello()  # is now the decorated version.

primer on decorators on realpython.com可能会有帮助。