Je pense qu'il y a de nombreuses circonstances dans lesquelles cela a du sens et simplifie la programmation d'avoir quelques globaux qui sont connus à travers plusieurs modules (étroitement couplés). Dans cet esprit, je voudrais développer un peu l'idée d'avoir un module de globaux qui est importé par les modules qui ont besoin de les référencer.
Lorsqu'il n'y a qu'un seul module de ce type, je le nomme "g". Dans ce module, j'attribue des valeurs par défaut à toutes les variables que j'ai l'intention de traiter comme globales. Dans chaque module qui utilise l'une d'entre elles, je n'utilise pas "from g import var", car cela ne donne qu'une variable locale qui n'est initialisée à partir de g qu'au moment de l'importation. Je fais la plupart des références sous la forme g.var, et le "g." sert de rappel constant que je traite une variable qui est potentiellement accessible à d'autres modules.
Si la valeur d'une telle variable globale doit être utilisée fréquemment dans une fonction d'un module, alors cette fonction peut en faire une copie locale : var = g.var. Cependant, il est important de réaliser que les affectations à var sont locales, et que la variable globale g.var ne peut pas être mise à jour sans faire référence à g.var explicitement dans une affectation.
Notez que vous pouvez également avoir plusieurs modules globaux de ce type partagés par différents sous-ensembles de vos modules pour garder les choses un peu plus étroitement contrôlées. La raison pour laquelle j'utilise des noms courts pour mes modules globaux est d'éviter de trop encombrer le code avec leurs occurrences. Avec un peu d'expérience, ils deviennent suffisamment mnémotechniques avec seulement 1 ou 2 caractères.
Il est toujours possible de faire une affectation à, disons, g.x lorsque x n'était pas déjà défini dans g, et un autre module peut alors accéder à g.x. Cependant, même si l'interpréteur le permet, cette approche n'est pas si transparente, et je l'évite. Il y a toujours la possibilité de créer accidentellement une nouvelle variable dans g à la suite d'une faute de frappe dans le nom de la variable pour une affectation. Parfois, un examen de dir(g) est utile pour découvrir tous les noms surprenants qui ont pu apparaître par un tel accident.