2015-10-24 3 views
0

Désolé, le titre n'est pas très clair mais c'est difficile à expliquer. Donc, je me demande comment vous pouvez avoir une certaine action dans chaque fonction d'un fichier python. Je veux qu'un utilisateur tape 'paper' dans n'importe quelle fonction dans le fichier python entier et je n'arrive pas à comprendre comment le faire. Voici un exemple:Python: Avoir une action dans chaque fonction d'un fichier python

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

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

Comment puis-je avoir la configuration de sorte qu'un utilisateur peut taper « papier » dans ces deux fonctions (de façon réaliste plus de 30) et il serait alors imprimer la déclaration « vous avez un document »

Merci beaucoup pour l'aide!

+0

Cela n'a aucun sens dans la façon dont il est écrit. Pouvez-vous élaborer plus? Êtes-vous capable de modifier le code source? –

+0

Avoir un appel 'raw_input' dans ** chaque ** fonction obligerait l'utilisateur à entrer quelque chose dans ** chaque ** fonction; aucun**. Quel est le problème plus général que vous essayez de résoudre en utilisant cette approche? (voir [le problème XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)) –

+0

pouvez-vous rechercher [decorators] (https: //wiki.python .org/moin/PythonDecorators # What_is_a_Decorator) – rebeling

Répondre

2

Si vous avez quelque chose que vous voulez appliquer à chaque fonction, vous devez utiliser un décorateur. Je ne sais pas exactement ce que vous essayez d'accomplir, mais cela ne devrait démontrer:

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

Comme vous pouvez le voir, somefunction n'a pas besoin d'être changé, il avait juste besoin @youhaveapaper placé avant la définition.

+0

C'est ce que je cherche ... Malheureusement je ne le comprends pas. C'est trop avancé pour que je le saisisse. Je vais donc l'ajouter manuellement à chaque fonction. J'apprécie vraiment l'aide si! – HenFish

+0

@HenFish Les décorateurs peuvent être un peu difficiles à comprendre si vous ne les avez jamais vus auparavant, mais je vous encourage à trouver un tutoriel sur eux avant d'abandonner. Ils sont une caractéristique assez puissante de Python! – BlivetWidget

+0

Je vais certainement les regarder quand j'en aurai l'occasion. C'est quelque chose que je veux apprendre, mais j'essaie de maîtriser l'information que je connais déjà. Merci pour le conseil. – HenFish

1

S'il vous plaît voir les bons commentaires et questions ci-dessus. Voulez-vous dire ceci:

#!/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

Je ne suis pas sûr que ce soit ce que je cherche. Je pense que l'autre réponse a eu, mais il est bien au-dessus de mon expérience et de mes connaissances à comprendre, donc je vais l'ajouter manuellement à chaque fonction. Merci beaucoup pour l'aide! – HenFish