0

Ich habe ein Programm, das auf dem Bildschirm auf einem boolean drucken die Funktion verboseprint entweder Druck oder nicht, basierend definiert:Funktion, die eine Funktion in Python definiert

# 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 

Mein Programm verwendet mehrere Dateien, und ich würde mag diese Definition von verboseprint in allen von ihnen verwenden. Alle Dateien werden dem booleschen Wert in_verbose_mode übergeben. Ich weiß, dass ich einfach selbst in einer Datei definieren und dann in alle meine anderen Dateien importieren kann, aber ich brauche die Funktionsdefinition, um auf zwei verschiedene Arten basierend auf einem Boolean deklariert werden zu können.

Also zusammenfassend: Ich brauche eine Funktion, die eine andere Funktion auf zwei verschiedene Arten deklarieren kann, die ich dann in mehrere Dateien importieren kann.

Jede Hilfe wäre willkommen.

+0

Sie wollen eine Funktion deklarieren und verwendet es überall auf unterschiedliche Weise, das ist, wie Polymorphismus funktioniert: http://stackoverflow.com/questions/1031273/what-is-polymorphism-what-is-it- für-und-wie-ist-es-benutzt. Und normalerweise definieren Sie auf diese Weise keine Funktion in Python. –

+0

Ich verstehe nicht, was Sie meinen "Alle Dateien werden die' in_verbose_mode' boolean übergeben. " Meinst du, jede Datei hat ihre eigene Variable? –

Antwort

3

Normalerweise möchten Sie auf diese Weise keine Funktion definieren.

Und ich denke, die einfache Möglichkeit, dies zu erreichen, ist Sie die boolean als Funktionsparameter übergeben und das Verhalten definieren basierend auf dem Parameter:

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 

Und dann diese Funktion importiert in anderen Dateien verwenden.

3

Sie sollten das Fabrikdesignmuster nachschlagen. Es ist im Grunde entworfen, um genau das zu tun, wovon Sie sprechen, obwohl es mit Klassen nicht funktionieren würde. Das heißt, Sie können das gewünschte Verhalten erhalten, indem Sie eine Klasse haben, die eines von zwei möglichen Objekten zurückgibt (basierend auf Ihrem booleschen Wert). Sie haben beide die gleiche Methode, aber es funktioniert anders (genau wie Ihre beiden Funktionen).

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