2017-07-25 172 views
0

所以我是業餘程序員,我想爲一些基於文本的黑客遊戲做些功能。其中,將會調用一個函數來讓玩家找到戰利品等等。所以我正在做一些「小規模測試」; 在我的測試過程中,我發現如果我有一個函數(它內部調用了一個不同的函數),那麼一些文本被「打印」,第二個函數將被首先調用。延遲函數調用 - Python

#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 
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() 

這樣在你DecorHello功能的語句不叫,直到你請致電decorated()

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

Hello() # is now the decorated version. 

有一個primer on decorators on realpython.com,這可能有助於:

,你可以使用裝飾也是這樣。