Comment puis-je effacer toutes les variables au moyen d'un script Python?
Je suis à la recherche de quelque chose de semblable à "effacer" dans Matlab: commande/fonction qui supprime toutes les variables de l'espace de travail, de les libérer de la mémoire système. Est-il une telle chose en Python?
EDIT: je veux écrire un script qui efface toutes les variables.
- Il sera utile si vous avez modifié votre titre à quelque chose comme "Comment puis-je effacer toutes les variables au moyen d'un script Python?" pour de futures recherches sur le sujet, parce que "Comment redémarrer la fenêtre de commande en Python?" n'a rien à voir avec ce que vous êtes en train de demander.
- changé
- Pouvez-vous fournir tout du contexte dans lequel cela a un sens?
- Sonne comme un autre cas d'essayer de déplacer des habitudes de codage à partir de leur environnement d'origine à un autre où ils ne font pas de sens.
- Si vous êtes juste une question, à propos de certains objets massifs (images ou d'autres tableaux de grande), vous pourriez
del
lorsque vous avez terminé. Si vous êtes inquiet à propos de l'espace de nom encombré, vous devriez reconsidérer votre conception en utilisant plusieurs noms. Par exemple, pour une série d'image se transforme, en gardant à chaque étape intermédiaire est probablement inutile. - "un script qui efface toutes les variables." Sonne comme deux scripts. Ou, encore plus simplement, les deux fonctions distinctes, chacune avec des espaces de noms. Pourquoi n'est-ce pas juste les deux fonctions?
- exploratoire de l'analyse scientifique dans une console. Il est fréquent de se retrouver avec de nombreuses onu voulu des variables (après avoir essayé des choses, et ensuite décider ce n'est pas une voie pertinents). Mais dans ce cas, Jean de La Rooy réponse est le plus approprié.
Vous devez vous connecter pour publier un commentaire.
La séquence de commandes suivante ne retirez chaque nom du module en cours:
Je doute que vous voulez vraiment faire, parce que "tous les le nom" comprend tous les built-ins, donc il n'y a pas beaucoup que vous pouvez faire après une telle total wipe out. Rappelez-vous, en Python il n'y a vraiment aucune une telle chose comme une "variable" -- il y a objets, de toutes sortes (y compris les modules, les fonctions, de classe, de nombres, chaînes, ...), et il y a noms, liés à des objets, ce que la séquence n'est de supprimer tous les noms à partir d'un module (les objets correspondants aller loin si et seulement si chaque référence a simplement été supprimée).
Peut-être que vous voulez être plus sélectif, mais il est difficile de savoir exactement ce que tu veux dire, sauf si vous voulez être plus précis. Mais, juste pour donner un exemple:
Cette séquence laisse seuls noms qui sont privés ou magique, y compris la
__builtins__
nom spécial qui abrite le tout intégré dans les noms. Donc, built-ins encore du travail, par exemple:Comme vous le voyez, le nom
n
(la variable de contrôle dans cefor
) arrive aussi de rester dans les parages (comme c'est re-lié dans lefor
clause de tous les temps à travers), de sorte qu'il pourrait être préférable de le nom de la variable de contrôle_
, par exemple, pour montrer clairement "c'est spécial" (en plus, dans le interactive interprète, le nom_
est re-lié de toute façon après chaque expression complète est entré à l'invite de commandes, à la valeur de cette expression, afin de ne pas rester pour longtemps;-).De toute façon, une fois que vous avez déterminé exactement ce qu'il est que vous voulez faire, il n'est pas difficile de définir une fonction de l'objet et de le mettre dans votre fichier de démarrage (si vous voulez uniquement dans des sessions interactives) ou le site-personnaliser le fichier (si vous le souhaitez dans chaque script).
int = (2).__class__
,str = ''.__class__
,True = (1 == 1)
etc...__builtins__
, 'nom',__doc__
,__package__
et votrereset()
fonction.exec
avec un vide dict w/o built-ins (vous pouvez accéder à tous les types viaobject.__subclasses__()
, mais ce qui les lie à leur "droit" des noms est un peu plus compliqué;-).__import__
est époustouflé avec__builtins__
, comme le sontopen()
,eval()
,execfile()
etexec()
. Donc réimportation, disons,__builtin__
à tout remettre est, autant que je peux voir, pas possible.exec 2+2
...for n in dir(): ... if n[0]!='_': delattr(this, n)
à un certain momentn=this
et de le supprimer dans la boucle! Donc à la prochaine itération, vous obtenez l'Erreur en essayantdelattr(this,n)
parce que vous venez de le supprimé! 🙂 Donc il ne fonctionne pas correctementNon, vous êtes mieux de le redémarrage de l'interprète
Ipython est un excellent remplacement pour le logiciel d'interprète et a la
%reset
de commande qui fonctionne généralementctrl-d
puispyt
->tab
de revenir dans l'interprète. Aucune raison de faire quelque chose de compliqué ici.%reset -f
non-interactif. stackoverflow.com/questions/38798181/...Si vous écrivez une fonction puis une fois que vous laisser tous les noms à l'intérieur de disparaître.
Le concept est appelé espace de noms et c'est tellement bon, il l'a fait dans le Zen de Python:
L'espace de noms de IPython peut également être réinitialisé avec la magie de commande
%reset -f
. (Le-f
signifie "force"; en d'autres termes, "ne me demandez pas si j'ai vraiment envie de supprimer toutes les variables, just do it.")%reset -sf
Ceci est une version modifiée de Alex réponse.
Nous pouvons enregistrer l'état d'un module de noms et de les restaurer en utilisant les 2 méthodes suivantes...
Vous pouvez également ajouter une ligne "clear = restoreContext" avant d'appeler saveContext() et clear() fonctionnera comme matlab est clair.
names = list(sys.modules[__name__].__dict__.keys())
, sinon Python se plaignent que vous avez changé la taille du dictionnaire lors de l'itération par le biais d'undict_keys
objet.import
cette réponse (dire que j'ai sauvé et je les importer à partir d'un Jupyter portable pour effacer l'espace de noms entre les différents problèmes dans un devoir à la maison), je pense que vous aurez envie d'utiliser"__main__"
au lieu de__name__
.En Spyder, on peut configurer la console IPython pour chaque fichier Python pour effacer toutes les variables avant chaque exécution dans le Menu
Run -> Configuration -> General settings -> Remove all variables before execution
.Dans le vide IDE il y a la Coque/Redémarrer Shell. Ctrl-F6 va le faire.
La
globals()
fonction retourne un dictionnaire, où les clés sont les noms des objets que vous pouvez nom (et les valeurs qui, par ailleurs, sontid
s de ces objets)Le
exec()
fonction prend une chaîne de caractères et l'exécute comme si vous venez de taper dans une console pythonDonc, le code est
Ici
else None
est ajouté par la suite la syntaxe de python. Ce code n'a pas l'air beau, mais c'est court. La meilleure façon de l'écrire est