2017-04-21 2 views
0

que je veux faire quelque chose de similaire à celle esquissée ici:immersion variable Python dans un autre fichier

Global Variable from a different file Python

Cependant, je crois que je ne reçois pas une sortie de la file.foo car la variable foo est pas explicitement défini dans file.py. Foo est un tableau de matrices créées à partir d'un fichier readfile. file.py ajoute les valeurs du fichier read à foo, ainsi file.py doit s'exécuter indépendamment pour définir foo. Pour cette raison, je me demande s'il existe un moyen de vider la définition de la variable python à un endroit que je peux appeler plus tard. Mon autre alternative est de vider cette variable dans un fichier txt que je ne veux vraiment pas faire pour éviter la création de fichiers inutiles et d'autres complications.

Edit:

C'est ce que j'ai:

color_matrices = Full_Layout(array=org_arr, resolution=1) 

def Globalize_RPF(): 
    global color_matrices 

Je suis en train d'appeler color_matrices dans mon pyfile actuel comme ceci:

from ThreeD_Core_Distribution import color_matrices 
RPF = color_matrices 
print(RPF) 

Répondre

0

je poste cette réponse mais je Je ne suis pas vraiment sûr si j'ai compris votre question. Vous avez parlé de cette question: Global Variable from a different file Python

Cependant, je crois que je ne reçois pas une sortie de la file.foo variables car foo n'est pas explicitement défini dans file.py. foo est un tableau de matrices créées à partir d'un fichier readfile.

Vous avez parlé de file.foo ne pas explicitement défini dans file. Ce que je comprends de votre déclaration est que, foo vit dans un autre objet qui vit dans le module file. Ainsi, afin d'obtenir foo vous devez chercher à travers cet objet:

import file 
file.object.foo 

ou:

import file * 
object.foo 

file.py ajoute les valeurs de la readfile à foo ainsi file.py doit fonctionner de façon indépendante à définir foo.

Vous essentiellement importer file module afin d'ajouter les valeurs de la readfile. Par conséquent, au sein de file vous devez ouvrir le fichier readfile pour ajouter ses valeurs à foo qui est fondamentalement un objet de file: file.foo.

J'espère juste que j'ai obtenu ce que vous demandez.

Edit:

Supposons que le code affiché est dans un fichier module appelé file:

color_matrices = Full_Layout(array=org_arr, resolution=1) 

def Globalize_RPF(): 
    global color_matrices 

color_matrices est globale car elle est attribuée au plus haut niveau du module. Cette déclaration global color_matrices dans la fonction Globalize_RPF déclarera que vous avez l'intention de changer la variable globale color_matrices:

def Globalize_RPF(): 
    color_matrices = Full_Layout(array=org_arr, resolution=1) # Local to function, you cannot use `file.foo` after importing `file` module 

Lorsque attribué cette façon, color_matrices est locale à la fonction. Qu'est-ce que ça veut dire? Cela signifie que la variable ne sera pas accessible en dehors de la fonction. Donc, même si vous essayez d'utiliser color_matrices après la fonction dans le module file, cela ne fonctionnera pas.

color_matrices = Full_Layout(array=org_arr, resolution=1)  # Top-level assignment, global var 

def Globalize_RPF(): 
    # process color_matrices 

maintenant color_matrices est une variable globale, c'est vous pouvez l'utiliser à l'intérieur file module dans les fonctions, les classes, dans les expressions et beaucoup d'autres endroits, vous pouvez référencer la variable partout dans file parce que son désormais mondiale. Parce que color_matrices est mondiale maintenant et non une variable locale dans une fonction, nous pouvons obtenir sa valeur en important file comme ce qui suit:

from file import color_matrices 
RPF = color_matrices 
print(RPF) 

Si vous devez réassigner color_matrices à de nouveaux résultats dans la fonction, utilisez global mot-clé:

def Globalize_RPF(): 
    global color_matrices 
    color_matrices = ...   # Changes global color_matrices 

Si vous utilisez uniquement color_matrices = ... à l'intérieur du corps de la fonction vous simplement créer color_matrices qui est à la fonction locale et vous ombre/override color_matrices de la portée mondiale, celui qui est affecté au sommet de th Le module

+0

Alors peut-être que c'est le problème: foo ne vit pas dans un objet dans le module de fichiers. Il s'agit simplement d'une variable définie par une fonction personnalisée qui analyse le fichier readfile. Ainsi, lorsque je tente d'imprimer (fichier.foo) dans mon fichier pyfile actuel, rien n'est renvoyé. Avoir peut-être vivre dans un objet est la solution? Je ne suis pas un expert en python donc je ne suis pas sûr de savoir comment faire ça. –

+0

Ok, puisque 'foo' est une variable locale dans une fonction, elle est accessible par cette fonction et toutes les fonctions englobantes s'il y en a. Afin de rendre 'foo' accessible lorsque vous qualifiez son nom via le nom du module:' file.foo', vous devez déplacer l'affectation vers la portée globale. Soit vous déclarez globalement 'foo' dans la fonction comme:' global foo' et ensuite vous affectez toutes les valeurs à 'foo':' foo = ... 'dans la fonction ou vous déplacez l'affectation de' foo' en dehors de la fonction fonction, au niveau supérieur du module. – direprobs

+0

s'il vous plaît voir modifier, je ne sais pas ce que je fais –