zero-cool Posted June 13, 2008 at 03:19 PM Report Share #191082 Posted June 13, 2008 at 03:19 PM Viva, Estou a tentar usar uma variável global em array, mas não estou a conseguir faze-la passar via import por vários ficheiros. Exemplificando: #ficheiro a.py global varteste varteste = "aaa" #ficheiro start.py import a import b print(varteste) # funciona #ficheiro b.py print(varteste) # não funciona Alguém sabe como dar a volta a isto? Abraço, Link to comment Share on other sites More sharing options...
Battousai Posted June 13, 2008 at 03:32 PM Report Share #191084 Posted June 13, 2008 at 03:32 PM globals()['variavel'] ? Link to comment Share on other sites More sharing options...
zero-cool Posted June 13, 2008 at 03:45 PM Author Report Share #191086 Posted June 13, 2008 at 03:45 PM print(globals()['varteste']) KeyError: 'varteste' Link to comment Share on other sites More sharing options...
Battousai Posted June 13, 2008 at 03:58 PM Report Share #191088 Posted June 13, 2008 at 03:58 PM Então o scope não deve permitir, só enviando como parâmetro de entrada para uma função. Link to comment Share on other sites More sharing options...
zero-cool Posted June 13, 2008 at 04:15 PM Author Report Share #191089 Posted June 13, 2008 at 04:15 PM Então o scope não deve permitir, só enviando como parâmetro de entrada para uma função. Não consigo dar a volta. Como o python usa namespaces, usar variáveis de outra importação não não parece ser possível. No entanto importar novamente não é conveniente, uma vez que essas variáveis que deveriam ser globais já podem ter sido alteradas. Ando mesmo à volta com isto... Link to comment Share on other sites More sharing options...
Battousai Posted June 13, 2008 at 04:17 PM Report Share #191090 Posted June 13, 2008 at 04:17 PM Só vendo o que estás a tentar fazer. Duvido que não haja outra solução. Link to comment Share on other sites More sharing options...
djthyrax Posted June 13, 2008 at 04:23 PM Report Share #191091 Posted June 13, 2008 at 04:23 PM Experimenta assim: __builtins__.var = "ois" print __builtins__.var Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum! Link to comment Share on other sites More sharing options...
zero-cool Posted June 13, 2008 at 04:33 PM Author Report Share #191094 Posted June 13, 2008 at 04:33 PM tirácio, também não funciona. Adicionei __builtins__['var'] = "ois" em a.py. O código print __builtins__.var Funciona em start.py (onde é feito o import directo) mas dá erro em b.py: AttributeError: 'dict' object has no attribute 'var' EDIT: não funcionou em b.py por causa de erro de escrita. Só funciona usando print __builtins__.var Link to comment Share on other sites More sharing options...
Battousai Posted June 13, 2008 at 04:35 PM Report Share #191096 Posted June 13, 2008 at 04:35 PM Experimenta assim: __builtins__.var = "ois" print __builtins__.var Só assim: __builtins__['var'] mas penso que seja uma solução feia :/ Link to comment Share on other sites More sharing options...
Battousai Posted June 13, 2008 at 04:38 PM Report Share #191097 Posted June 13, 2008 at 04:38 PM zero-cool tens que fazer print __builtins__['var'] Link to comment Share on other sites More sharing options...
zero-cool Posted June 13, 2008 at 04:41 PM Author Report Share #191099 Posted June 13, 2008 at 04:41 PM zero-cool tens que fazer print __builtins__['var'] Exacto. Já reparei. Obrigado. 👍 mas penso que seja uma solução feia :/ Pois... mas o efeito é esse. É exactamente isso que pretendo mas com variáveis criadas por mim. Acumular tudo em builtins não é muito agradável... Link to comment Share on other sites More sharing options...
zero-cool Posted June 13, 2008 at 05:16 PM Author Report Share #191109 Posted June 13, 2008 at 05:16 PM Talvez não seja propriamente um "import", mas sim um "include"..? Link to comment Share on other sites More sharing options...
JoaoRodrigues Posted June 13, 2008 at 05:20 PM Report Share #191110 Posted June 13, 2008 at 05:20 PM Tu tens a variável no a.py, importa-a para o start.py e ela não funciona no b.py? Não é normal isso? Link to comment Share on other sites More sharing options...
Tharis Posted June 13, 2008 at 06:41 PM Report Share #191120 Posted June 13, 2008 at 06:41 PM Tu tens a variável no a.py, importa-a para o start.py e ela não funciona no b.py? Não é normal isso? Exactamente! Se quiseres tê-la no b.py, tens de importar o módulo a.py no b.py Link to comment Share on other sites More sharing options...
zero-cool Posted June 13, 2008 at 09:37 PM Author Report Share #191143 Posted June 13, 2008 at 09:37 PM Exactamente! Se quiseres tê-la no b.py, tens de importar o módulo a.py no b.py E posso usar a variável definida em start.py no ficheiro importado a.py? Ou seja, usar a variável já existente no novo módulo? Link to comment Share on other sites More sharing options...
djthyrax Posted June 13, 2008 at 09:56 PM Report Share #191145 Posted June 13, 2008 at 09:56 PM Sim, desde que uses o global no start.py antes de declarares, e o global no a.py antes de usares. Digo eu. Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum! Link to comment Share on other sites More sharing options...
JoaoRodrigues Posted June 14, 2008 at 05:47 PM Report Share #191216 Posted June 14, 2008 at 05:47 PM O módulo A tem a variável a. O módulo B tem a variável b. Se tu fizeres, num módulo C: import A import B varModA = A.a varModB = B.b Está feito. Se fizeres, no módulo C: import A varA = A.a E num módulo D: import C print C.varA Também funciona. Quando carregas um módulo que importa outros módulos, bibliotecas, whatever, estas são carregadas automaticamente, como se importasses também esses módulos em separado. (At least, nos meus proggies tiro bom partido disso) Link to comment Share on other sites More sharing options...
zero-cool Posted June 15, 2008 at 11:12 AM Author Report Share #191300 Posted June 15, 2008 at 11:12 AM Ok. Obrigado pela ajuda pessoal. 🙂 Não estava de facto a contar que o Python usasse os namespace de forma tão "obrigatória", ao contrário do PHP. Abraço, Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now