• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

zero-cool

Variável global

18 mensagens neste tópico

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,

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então o scope não deve permitir, só enviando como parâmetro de entrada para uma função.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Só vendo o que estás a tentar fazer. Duvido que não haja outra solução.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Experimenta assim:

__builtins__.var = "ois"

print __builtins__.var

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Experimenta assim:

__builtins__.var = "ois"

print __builtins__.var

Só assim:

__builtins__['var']

mas penso que seja uma solução feia :/

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

zero-cool tens que fazer print __builtins__['var']

Exacto. Já reparei. Obrigado. :thumbsup:

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...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Talvez não seja propriamente um "import", mas sim um "include"..?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, desde que uses o global no start.py antes de declarares, e o global no a.py antes de usares. Digo eu.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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,

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora