Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

zero-cool

Variável global

Mensagens Recomendadas

zero-cool    0
zero-cool

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,

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
zero-cool    0
zero-cool

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
zero-cool    0
zero-cool

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Battousai    1
Battousai

Experimenta assim:

__builtins__.var = "ois"

print __builtins__.var

Só assim:

__builtins__['var']

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
zero-cool    0
zero-cool

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Tharis    3
Tharis

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
zero-cool    0
zero-cool

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?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
JoaoRodrigues    0
JoaoRodrigues

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)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
zero-cool    0
zero-cool

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,

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


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade