2017-06-30 6 views
1

J'ai une fonction dont j'ai besoin pour calculer ce qui doit fonctionner avec des nombres assez grands (quelque chose comme 200^200). J'ai trouvé que je peux traiter assez bien avec le paquet Decimal, mais la fonction est assez lente. J'ai donc installé le paquet GMPY2, et j'ai été en mesure de réduire le temps d'environ septième. Cependant, j'ai besoin de distribuer la fonction à d'autres, et tout le monde n'a pas le module GMPY2. Comment puis-je changer la définition de la fonction en fonction des modules disponibles. Est-ce que je peux faire quelque chose comme ceci:Définir une fonction basée sur les modules disponibles

try: 
    import gmpy2 
    def function_with_big_numbers() 
exceptImportError: 
    import decimal 
    def function_with_big_numbers() 

ou cela causera-t-il des problèmes? Y at-il une meilleure façon

Répondre

1

qui fonctionnera, mais je ferais quelque chose le long des lignes de

try: 
    import gmpy2 
except: 
    gmpy2 = None 

def function_with_big_numbers(): 
    if gmpy2 is None: 
     # put code executed when gpy2 is not available 
     return 
    # put code executed when gpy2 is available 

De cette façon rend plus propre et plus facile à gérer

+0

Merci, je le ferai alors. J'y avais pensé car je faisais quelque chose de similaire ailleurs, je ne savais pas à quel point le code serait clair en plaçant les deux définitions dans la même déclaration de def. –