zero-cool Posted June 13, 2008 Report Share Posted June 13, 2008 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 Report Share Posted June 13, 2008 globals()['variavel'] ? Link to comment Share on other sites More sharing options...
zero-cool Posted June 13, 2008 Author Report Share Posted June 13, 2008 print(globals()['varteste']) KeyError: 'varteste' Link to comment Share on other sites More sharing options...
Battousai Posted June 13, 2008 Report Share Posted June 13, 2008 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 Author Report Share Posted June 13, 2008 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 Report Share Posted June 13, 2008 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 Report Share Posted June 13, 2008 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 Author Report Share Posted June 13, 2008 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 Report Share Posted June 13, 2008 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 Report Share Posted June 13, 2008 zero-cool tens que fazer print __builtins__['var'] Link to comment Share on other sites More sharing options...
zero-cool Posted June 13, 2008 Author Report Share Posted June 13, 2008 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 Author Report Share Posted June 13, 2008 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 Report Share Posted June 13, 2008 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 Report Share Posted June 13, 2008 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 Author Report Share Posted June 13, 2008 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 Report Share Posted June 13, 2008 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 Report Share Posted June 14, 2008 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 Author Report Share Posted June 15, 2008 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