10
votes

Modification d'une variable dans un module importé à partir de ... Import *

Considérez le code suivant:

toolsmodule.database = "foo"


0 commentaires

3 Réponses :


18
votes

Cela ressemble à une autre multitude de bonnes raisons de ne pas utiliser à partir d'outilsModule Import * .

Si vous venez de faire Importer des outilsModule , vous pouvez faire outilsmodule.database = 'foo' , et tout est merveilleux.


4 commentaires

Je le sais, mais j'utilise beaucoup ces variables, j'ai beaucoup de noms de module et j'aimerais éviter le typing supplémentaire.


Donc, faire des noms de module court: importer longmodulename comme sname . Maintenant, Sname se référera à longmodulename .


Si vous ne voulez pas taper Module d'outils à chaque fois, vous pouvez procéder comme suit: Importer des outils Module ASTM . De cette façon, vous gardez votre espace d'espace de noms et sauvegardez la saisie.


Et si vous voulez vraiment spamber votre espace de noms principal avec des outils d'outils. *, Utilisez simplement les deux techniques ensemble: Importer des outils Motoule; De OutilsModule Importer * .



2
votes

Pourquoi ne le faites-vous pas comme ça:

import toolsmodule
toolsmodule.database = "foo"
from toolsmodule import *  #bad idea, but let's say you have to..
print database #outputs foo


1 commentaires

Quand j'ai essayé cela, je crois que j'ai fini par ne pas être capable de modifier plus la variable des outils intérieurs MMODULE. Cela doit être vérifié.



6
votes

Les noms de variables Pythons sont simplement des étiquettes sur les variables. Lorsque vous IMPORT * Toutes ces étiquettes sont locales et lorsque vous définissez la base de données, vous pouvez simplement remplacer la variable locale, pas celle du MModule d'outils. Par conséquent, faites ceci:

outilsModule.py: xxx

puis exécutez: xxx

la sortie est < / p> xxx

Notez que si vous à partir d'un autre module a également fait un import * le changement n'est pas reflété.

en bref: N'utilisez jamais à partir de x importer * . Je ne sais pas pourquoi tous les débutants persistent à faire cela malgré toute la documentation que je connaisse dit que c'est une mauvaise idée.


0 commentaires