Question

J'ai deux fichiers;

  1. Le premier fichier, myProgram.py, est un fichier python avec un certain nombre de fonctions
    L'une des fonctions contenues à l'intérieur est myFunctionCette fonction serait appelée avec

    import myProgram
    myProgram.thisFunction()
    myProgram.thatFunction()
    
  2. Le deuxième fichier contient un système de menu, avec des appels aux fonctions dans myProgram.py

Je voudrais appeler une fonction particulière basée sur un argument transmis à une fonction dans File2

def file2_function(function):
    myProgram.function

file2_function(thisFunction(x,y,z))

qui créerait essentiellement MyProgram.

Je suppose que je pourrais le faire en utilisant un tas de déclarations if / elif, disons:

def file2_function(function):
    if function == 1:
        myProgram.thisFunction
    elif function == 2: 
        myProgram.thatFunction

Bien que cela puisse devenir désordonné car j'utilise déjà beaucoup d'instructions IF / ELIF / ELSE pour le système de menu.

Y a-t-il une meilleure façon (ou la route if / elif est-elle la voie à suivre?)

Était-ce utile?

La solution 4

Vous avez également getattr. Voir l'extrait suivant:

>>> import sys
>>> getattr(sys,'exc_info')
<built-in function exc_info>
>>> getattr(sys,'exc_info')()
(None, None, None)

Autres conseils

La *args dans la fonction file2_function signifie les arguments à transmettre à la fonction dans laquelle il appelle:

def func1(a):
    print a

def file2_function(function,*args):
    function(*args)

file2_function(func1,4)
#4

Vous pouvez créer un dictionnaire où la clé est le nom de la fonction, et la valeur est la fonction elle-même. Exemple court:

functions = { 'add' : lambda x,y : x + y, 'mult': lambda x,y : x * y, 'div' : lambda x,y : x / y, 'sub' : lambda x,y : x - y  }
functions['add'](1,2) # returns 3

@aga vous a donné un bon indice. Lorsque j'écris des applications CLI, je fais habituellement SMTH comme:

def func1():
    pass

def func2():
    pass

def func3():
    pass

def func_caller(name):
    func_dict = {
        'func1': func1,
        'func2': func2,
        'func3': func3
        }
    try:
        func_dict[name]()
    except KeyError:
        print "no such func"
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top