je ma bibliothèque structuré comme tel:Est-ce que la variable globale à l'intérieur d'un sous-module serait rechargée chaque fois que j'appellerais une fonction?
/topmost
/__init__.py
/submodule
/__init__.py
Avec le submodule.__init__.py
, il y a plusieurs fonctions qui utilise des variables globales pour communiquer les uns avec les autres:
import pickle
def function1(input):
global _object1
try:
_object1
except NameError:
_object1 = pickle.load(open('model1.pkl', 'rb'))
return _object1.func1(input)
def function2(input):
global _object2
try:
_object2
except NameError:
_object2 = pickle.load(open('model1.pkl', 'rb'))
# Use function1 to do something to the input
return _object2.func2(function1(input))
Et pour l'utilisateur, ils ne sera pas en mesure d'accéder à la forme _object1
ou _object2
le topmost
et dans le topmost.__init__.py
, seules les fonctions de submodule
ont été importées:
from __future__ import absolute_import
from topmost.submodule import *
Et lorsque les utilisateurs utilisent la bibliothèque topmost
, ils ne seront exposent à:
>>> import topmost
>>> topmost.function1('foo bar')
>>> topmost.function2('foo bar bar')
>>> topmost.function1('blah blah black sheep')
Lorsque la première instance de topmost.function1('foo bar')
est appelée, l'interprète doit lancer dans la _object1
mondiale dans le cadre topmost.submodule
. Mais le _object1
serait-il détruit après que le topmost.function1
ait reçu la valeur retournée?
Plus important encore, lorsque la deuxième instance de topmost.function1('blah blah black sheep')
est appelée dans l'extrait d'utilisation ci-dessus, serait le _object1 = pickle.load(open('model1.pkl', 'rb'))
être rechargé?
En ce qui concerne la « vérification de variable » et l'utilisation variable globale, je pense aussi qu'il devrait y avoir un meilleur pour résoudre ce problème. J'ai posé une question séparée sur cette question: http://stackoverflow.com/questions/43907083/creating-a-decorator-cache-for-checking-global-variable – alvas