2015-06-16 2 views
0

Из файла foo.py, я хочу, чтобы изменить значение переменной, помещено в другом файле, скажем bar.py.Как изменить значение переменной из другого .py файла в Python

Я попытался сделать это, импортируя переменную, но кажется, что она импортирована не как ссылка.

Всего примеры:

bar.py:

age = 18 

foo.py:

from bar import age 

def changeAge(age, newAge): 
    age = newAge 

changeAge(age, 19) 

Я также попытался пройти age в качестве параметра из бара .py, но тот же результат, он не передается b y, поэтому его значение не изменяется.

bar.py:

from foo import changeAge 

age = 18 

changeAge(age, 19) 

Как я уже сказал, он не работает. Я знаю, что могу достичь этого, возвращая var из функции, но это, вероятно, заставит меня изменить много кода, и почему бы и нет, я хочу знать, есть ли способ сделать то, что мне нужно, я все еще начинающий в Python. Другой способ - обернуть переменную в объект, список или что-то в этом роде, но это не кажется слишком элегантным.

+0

Невозможно. Взгляните на этот [stackoverflow answer] (http://stackoverflow.com/a/986145/3122880) –

ответ

5
def changeAge(newAge): 
    import bar 
    bar.age = newAge 
+0

Он отлично работает, но что такое нижняя сторона или недостатки импорта полного файла? – Drumnbass

+0

с точки зрения производительности, требуется разбор этого файла (и любых других модулей, импортированных в этот файл). в терминах таблицы символов он создает только символ «bar», и он делает это в рамках функции «changeAge», поэтому он не будет влиять на глобальную таблицу символов – fferri

-2

Если вы просто хотите, чтобы изменить значение 'возраста', вы можете сделать следующее

bar.py

age = 18 

foo.py

import bar 

def changeAge(newAge): 
    bar.age = newAge 

changeAge(19) 
-2

Вы забыл вернуть newAge.

from bar import age 

def changeAge(age, newAge): 
    age = newAge 
    return newAge 

print changeAge(age, 19) 

Распечатывается 19, как ожидалось.

+0

Как я уже сказал, я не хочу возвращать значения. – Drumnbass

+0

Плохо, я не читал внимательно. В этом случае попробуйте 'bar.age' вместо простого возраста, должен работать. –

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