J'écris un programme qui utilise des techniques génétiques pour faire évoluer des équations. Je veux être en mesure de soumettre la fonction 'mainfunc' à la fonction 'soumettre' de Python parallèle. La fonction 'mainfunc' appelle deux ou trois méthodes définies dans la classe Utility. Ils instancient d'autres classes et appellent diverses méthodes. Je pense que ce que je veux, c'est tout dans un NAMESPACE. J'ai donc instancié quelques-unes (peut-être toutes les classes) dans la fonction 'mainfunc'. J'appelle la méthode utilitaire 'generate()'. Si nous devions suivre sa chaîne d'exécution , cela impliquerait toutes les classes et méthodes du code.Structurer un programme. Classes et fonctions en Python
Maintenant, les équations sont stockées dans un arbre. Chaque fois qu'un arbre est généré, muté ou croisé, les noeuds doivent recevoir une nouvelle clé afin qu'ils puissent être accédés à partir d'un attribut de dictionnaire de l'arbre. La classe 'KeySeq' génère ces clés.
En Parallèle Python, je vais envoyer plusieurs instances de 'mainfunc' à la fonction 'submit' de PP. Chacun doit pouvoir accéder à 'KeySeq'. Ce serait bien si tous avaient accès à la même instance de KeySeq, de sorte qu'aucun des nœuds des arbres retournés n'avait la même clé, mais je pourrais contourner cela si nécessaire. Donc: ma question concerne le bourrage de tout dans Mainfunc. Merci (Edit) Si je n'inclus pas tout dans mainfunc, je dois essayer de dire à PP sur les fonctions dépendantes, etc. en faisant passer diverses argumentations à divers endroits. J'essaie d'éviter ça.
(fin Edit) si ks.next() est appelée dans la « fonction generate(), il renvoie l'erreur 'NameError: nom global 'ks' est pas défini'
class KeySeq:
"Iterator to produce sequential \
integers for keys in dict"
def __init__(self, data = 0):
self.data = data
def __iter__(self):
return self
def next(self):
self.data = self.data + 1
return self.data
class One:
'some code'
class Two:
'some code'
class Three:
'some code'
class Utilities:
def generate(x):
'___________'
def obfiscate(y):
'___________'
def ruminate(z):
'__________'
def mainfunc(z):
ks = KeySeq()
one = One()
two = Two()
three = Three()
utilities = Utilities()
list_of_interest = utilities.generate(5)
return list_of_interest
result = mainfunc(params)
J'ai essayé de brancher votre 'tour de paramètre par défaut'. Une erreur s'est produite dans la méthode 'utilities.generate(): a = key "NameError: nom global' clé 'n'est pas défini" J'ai vérifié que' mainfunc (ks = KeySeq()) 'a été appelé sans aucune paramètres. En ce moment j'essaye de faire fonctionner ceci sans référence à PP. Cependant, j'étudierai la deuxième moitié de votre message. Et je ferai référence à callback.py avant d'introduire PP. –
J'ai aussi essayé la seconde méthode proposée, la plus explicite. Il a produit la même erreur dans la même méthode 'utilities.generate(). –
Il semble que vous soyez sous l'impression que 'key' est visible en dehors de la fonction' mainfunc'. Il ne sera pas disponible pour 'Utilities.generate()' à moins que vous ne fassiez quelque chose pour le rendre - faites-en un argument de la fonction 'generate', disons, ou passez-le dans le constructeur, ou fixez un attribut sur le' L'objet Utilities après l'avoir instancié. Ou en faire une variable au niveau du module et la référencer en utilisant 'global'. Il y a des dizaines de façons de le faire, mais vous devez en utiliser une. –