je remarquai un problème quand je cherchais à utiliser dans un del lambda pour amincir une liste de threads à seulement ceux en cours d'exécution:Python del() built-in ne peut pas être utilisé dans l'affectation?
map(lambda x: del(x) if not x.isAlive() else x, self.threads)
Ignore pour une seconde que cela ne fait rien, je suis juste duper autour de la carte, réduire, et lambda.
Ceci échoue avec une erreur de syntaxe à del (x). Avec un peu de déconner, je pense que le problème est del() ne renvoie pas une valeur. Par exemple, cela ne fonctionne pas avec la même erreur:
b = 5
x = del(b)
Cela ne permet cependant pas:
def rmThis(x): del(x)
Ce qui signifie que j'utilise cette solution de contournement:
map(lambda x: rmThis(x) if not x.isAlive() else x, self.threads)
Ainsi est le limitation juste parce que del() ne renvoie pas une valeur? Pourquoi pas?
J'utilise python 2.6.2
Est-il nécessaire d'appeler 'del' sur les objets thread explicitement? Si vous pouvez le laisser au compteur de référence ou au garbage collector, vous pouvez écrire à la place: '[thread pour thread dans self.threads si thread.isAlive()]'. –
Même si cela fonctionnait, cela ne fonctionnerait pas :) Vous ne pouvez pas supprimer des éléments d'un itérable pendant que vous l'itérez. –