2015-10-24 68 views
0

對不起,標題不是很清楚,但它很難解釋。所以我想知道如何在python文件的每個函數中發生某種動作。我想要一個用戶在整個python文件中的任何函數內鍵入'paper',我不知道如何去做。這裏有一個例子:Python:在python文件的每一個函數內都會發生一個動作

def a(): 
    raw_input() 
    print "Test" 

def b(): 
    raw_input() 
    print "Test 2" 

我怎麼可以把它設置,以便用戶可以在這兩個函數(現實超過30+)型「紙」,然後將打印語句「你有一紙」

非常感謝您的幫助!

+0

這沒有意義的方式來寫。你能詳細解釋一下嗎?你能修改源代碼嗎? –

+0

在**每個**函數中都有一個'raw_input'調用需要用戶輸入**每個**函數;沒有**。 使用這種方法試圖解決的更一般問題是什麼? (見[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)) –

+0

您是否在找[decorators](https://wiki.python .org/moin/PythonDecorators#What_is_a_Decorator) – rebeling

回答

2

如果你有什麼想要應用於每一個函數,你應該使用一個裝飾器。我不完全相信你想實現什麼,但是這應該證明:

>>> def youhaveapaper(function): 
    def wrapper(*args): 
     response = input('whatchu got?\n>>> ') 
     if response == 'paper': 
      print('you have a paper') 
     return function(*args) 
    import functools 
    functools.update_wrapper(wrapper, function) 
    return wrapper 

>>> @youhaveapaper 
def somefunction(x): 
    """return the square of x""" 
    return x**2 

>>> y = somefunction(5) 
whatchu got? 
>>> paper 
you have a paper 
>>> y 
25 

正如你所看到的,somefunction並不需要改變,它只是需要@youhaveapaper放在定義之前。

+0

這是我正在尋找...可悲的是我不明白它。這對我來說太先進了。所以我會手動將它添加到每個函數。儘管我很欣賞這個幫助! – HenFish

+0

@HenFish如果你以前從未見過他們,裝飾者可能會有點難以理解,但是我建議你在放棄之前找到他們的教程。它們是Python非常強大的功能! – BlivetWidget

+0

當我有機會時,我一定會對他們進行調查。這是我想學習的東西,但我正在努力掌握我已經知道的信息。感謝您的建議。 – HenFish

1

請看上面的好評和問題。你的意思是:

#!/usr/bin/python                                              

def paper(prompt): 
    response = raw_input(prompt+' ') 
    print('you have a {}'.format(response)) 

def a(): 
    paper('Test') 

def b(): 
    paper('Test2') 

a() 
b() 
+0

我不確定那是我在找什麼。我認爲另一個答案得到了它,但它是高於我的經驗和知識理解,所以我會手動將其添加到每個功能。十分感謝你的幫助! – HenFish

相關問題