2013-04-18 5 views
3

У меня есть modules.py файл:Глобальные переменные через несколько файлов в Python

global dns_server_ip 
def SetVnetGlobalParameters(): 
    dns_server_ip = '192.168.3.120' 

И я импортируя этот файл, скажем abc.py файл

from modules import * 
SetVnetGlobalParameters() 
print(dns_server_ip) 

Но 'dns_server_ip' является все еще недоступны.

Я хочу установить глобальные параметры только через функцию. Любая помощь будет принята с благодарностью! спасибо ..

+0

Легко крепится Zangetsu Anwer, но почему бы не просто сделать это атрибут уровня модуля? – wim

+2

Кроме того, убедитесь, что у вас нет этого символа '' 'в исходном коде, кроме' ''. – wim

+0

Спасибо большое за ответ :-) – ShitalSavekar

ответ

9

По вашему вопросу я понимаю, вы новичок в Python.

При импорте модулей вы используете только имя модуля и не должны включать расширение или суффикс (py), а в вашем коде вы пропускаете стартовую одиночную кавычку.

Вот ваш измененный код: это modules.py

dns_server_ip = '' 
def SetVnetGlobalParameters(): 
    global dns_server_ip 
    dns_server_ip = '192.168.3.120′ 

Вот ваш abc.py

import modules 
modules.SetVnetGlobalParameters() 
print modules.dns_server_ip 

Вот через глобальное ключевое слово мы говорим интерпретатор питона изменить или укажите глобальную переменную вместо локальной переменной, и всегда переменная будет либо global, либо local Если переменная является как локальной, так и глобальной, вы получите python UnboundLocalError exception a ой, если не положить, что глобальное ключевое слово

global dns_server_ip 

dns_server_ip будет создан в качестве новой локальной переменной. Ключевое слово global намеревался с в функциях только

вы можете проверить global keyword, python modules

+0

Спасибо за ответ. Я внес изменения в файл modules.py. Теперь он печатает пустую строку только вместо ожидаемого '192.168.3.120 ' – ShitalSavekar

+1

, пожалуйста, попробуйте мою отредактированную версию, даже я проверил себя. Он работает так, как вы ожидали. Здесь вы не должны использовать «from modules import *» , вместо этого мы должны использовать модули импорта. Когда мы используем «из импорта модулей», все атрибуты модуля импортируются в глобальное пространство имен текущего модули, в которых мы импортировали содержимое других модулей –

+0

Спасибо вам большое за подробное объяснение :-) – ShitalSavekar

3

В modules.py

dns_server_ip = None 
def SetVnetGlobalParameters(): 
    global dns_server_ip 
    dns_server_ip = '192.168.3.120' 

В abc.py

import modules 
modules.SetVnetGlobalParameters() 
print(modules.dns_server_ip) 
+0

Спасибо за ответ .. Согласно вашему предложению, я сделал следующие изменения .. Modules.py- глобальные dns_server_ip Защиту SetVnetGlobalParameters(): dns_server_ip = '192.168.3.120' abc.py- из модулей импорта * SetVnetGlobalParameters() печати (dns_server_ip) Тем не менее "dns_server_ip" не является доступным. :-( – ShitalSavekar

+0

Я внесли определенные изменения, посмотрю – Zangetsu

+0

Большое вам спасибо :-) – ShitalSavekar

Смежные вопросы