0

J'ai un programme qui définit la fonction verboseprint à imprimer ou ne pas imprimer à l'écran basé sur une valeur booléenne:Fonction qui définit une fonction en python

# define verboseprint based on whether we're running in verbose mode or not 
if in_verbose_mode: 
    def verboseprint (*args): 
     for arg in args: 
      print arg, 
     print 
    print "Done defining verbose print." 
else: 
    # if we're not in verbosemode, do nothing 
    verboseprint = lambda *a: None 

Mon programme utilise plusieurs fichiers, et je aimer utiliser cette définition de verboseprint dans chacun d'eux. Tous les fichiers seront passés le in_verbose_mode booléen. Je sais que je pourrais juste définir verboseprint par lui-même dans un fichier, puis l'importer dans tous mes autres fichiers, mais j'ai besoin de la définition de la fonction pour pouvoir être déclarée de deux manières différentes sur la base d'un booléen. Donc, en résumé: J'ai besoin d'une fonction qui peut déclarer une autre fonction de deux façons différentes, que je peux ensuite importer dans plusieurs fichiers.

Toute aide serait appréciée.

+0

Vous voulez déclarer une fonction et utilisée partout de différentes manières, voici comment fonctionne le polymorphisme: http://stackoverflow.com/questions/1031273/what-is-polymorphism-what-is-it- pour-et-comment-est-il-utilisé. Et généralement, vous ne définissez pas une fonction dans python de cette façon. –

+0

Je ne comprends pas ce que vous entendez par "Tous les fichiers seront passés le booléen' in_verbose_mode'. " voulez-vous dire que chaque fichier a sa propre variable comme ça? –

Répondre

3

Habituellement, vous ne voulez pas définir une fonction de cette manière.

Et je pense que la façon facile d'y parvenir est que vous passez le booléen comme paramètre de fonction et de définir le comportement en fonction du paramètre:

def verboseprint (*args, mode): 
    if mode == in_verbose_mode: 
     for arg in args: 
      print arg, 
     print 
     print "Done defining verbose print." 
    # if we're not in verbosemode, do nothing 
    ##else: 
    ## verboseprint = lambda *a: None 

Et puis importer cette fonction à utiliser dans vos autres fichiers.

3

Vous devez rechercher le motif de conception d'usine. Il est essentiellement conçu pour faire exactement ce dont vous parlez, bien que ce soit avec des classes et non des fonctions. Cela étant dit, vous pouvez obtenir le comportement que vous voulez en ayant une classe qui retourne l'un des deux objets possibles (basé sur votre booléen). Ils ont tous les deux la même méthode mais elle fonctionne différemment (tout comme vos deux fonctions).

Class A: 
    def method(): 
      do things one way 

Class B: 
    def method(): 
      do things another way 

    import A,B 
Class Factory: 
    def __init__(bool): 
      self.printer = A if bool else B 

    def do_thing(): 
      self.printer.method() 




import Factory 
fac = Factory(True) 
fac.do_thing() # does A thing 
fac = Factor(False) 
fac.do_thing() # does B thing