Python valeurs de retour?
Comment dois-je faire? Peut - je faire cela?
def aFunction(argument):
def testSomething():
if thisValue == 'whatItShouldBe':
return True
else:
return False
if argument == 'theRightValue': # this is actually a switch using elif's in my code
testSomething()
else:
return False
def aModuleEntryPoint():
if aFunction(theRightValue) == True:
doMoreStuff()
else:
complain()
aModuleEntryPoint()
aModuleEntryPoint()
doit d'abord s'assurer qu'une condition est vraie avant qu'il ne commence à faire des choses. À cause de l'encapsulation, aModuleEntryPoint
ne sais pas comment faire pour vérifier l'état, mais aFunction()
a une sous-fonction appelée testSomething()
qui ne savent comment vérifier l'état. aModuleEntryPoint()
appels aFunction(theRightValue)
.
Parce que theRightValue
a été transmis à aFunction()
comme argument, aFunction()
appels testSomething()
. testSomething()
effectue la logique de test, et renvoie soit True
ou False
.
J'ai besoin pour aModuleEntryPoint()
savoir ce que testSomething()
décidé. Je ne veux pas aModuleEntryPoint()
de savoir quelque chose au sujet de la façon dont testSomething()
est venu à sa conclusion.
Ce serait un accomplissement d'après mes sources réelles lors de la suppression d'autres fonctions, et qu'est-ce-pas, j'ai donc dû le programme d'installation le sens général de ce genre.
- merci @Eimantas, ce qui rend mon mal à la tête moins maintenant 🙂
Vous devez vous connecter pour publier un commentaire.
La seule chose que je vois mal le droit maintenant vous avez besoin d'un
return
avanttestSomething()
sur la ligne 9.Peut-être une sous-fonction n'est pas la bonne encapsulation outil pour vous ici. Vous souhaitez exposer des fonctions internes à une entité externe. Les classes Python fournir un meilleur mécanisme pour exprimer ce que sous-fonction. Ayant une classe, vous pouvez exposer toutes les parties de l'intérieur de fonctionnalités que vous souhaitez de manière très contrôlée.
Ma première pensée en regardant ton code, c'est que c'est un peu trop compliqué. Pourquoi avoir
aFunction
à tous? Vous pouvez simplement écrireCe
if
clause d'abord vérifier siargument
est une des valeurs de droite, et si c'est le cas, il va procéder à l'appeltestSomething()
et vérifier la valeur de retour de cette. Seulement si la valeur de retour est true, il appelledoMoreStuff()
. Si l'un des tests échoue (c'est pourquoi j'ai utiliséand
), il seracomplain()
.aFunction
contenait suffisamment de code pour justifier sa propre fonction.