Python импортирует переменные из другого файла - PullRequest
2 голосов
/ 09 июня 2019

У меня есть 3 файла в одном каталоге: test1.py, test2.py и init .py.

В test1.py у меня есть этот код:

def test_function():
    a = "aaa"

В test2.py у меня есть этот код:

from test1 import *


def test_function2():
    print(a)


test_function2()

Я могу импортировать "test_function" (и вызвать функцию) в test2.py, но я не могу использовать переменную "a" в test2.py.

Ошибка: неразрешенная ссылка "a".

Я хотел бы знать, возможно ли использовать "a" внутри test2.py.

Ответы [ 6 ]

3 голосов
/ 09 июня 2019

В test1.py у вас может быть функция, которая возвращает значение переменной a

def get_a():
    return a

А когда вы в test2.py, вы можете позвонить get_a().

Так что в test2.py сделайте это, чтобы по существу переместиться на значение a из test1.py.

from test1 import *

a = get_a()

def test_function2():
    print(a)


test_function2()
1 голос
/ 09 июня 2019

a определяется только в области действия test_function().Вы должны определить его вне функции и получить к нему доступ с помощью ключевого слова global.Вот как это выглядит:

test1.py

a = ""
def test_function():
    global a
    a = "aaa"

test2.py

import test1

def test_function2():
    print(test1.a)

test1.test_function()
test_function2()
1 голос
/ 09 июня 2019

Test1.py

def test_function():
    a = "aaa"
    return a

Test2.py

import test1


def test_function2():
    print(test1.test_function())


test_function2()
1 голос
/ 09 июня 2019

Каковы правила для локальных и глобальных переменных в Python? 100

В Python переменные, на которые есть ссылки только внутри функции, неявно являются глобальными. Если переменной в любом месте тела функции присваивается значение, оно считается локальным, если явно не объявлено как глобальное.

Так что сделайте переменную a global и вызовитеtest_function() в test1 модуле, так что он делает a глобальной переменной при загрузке модулей

test1.py

def test_function():
  global a
  a = "aaa"

test_function() 

test2.py

from test1 import *

def test_function2():
  print(a)


test_function2()
0 голосов
/ 09 июня 2019

Ваш код работает отлично (с 'a', определенным вне функции test1_), смог вывести 'a'. Поэтому попробуйте следующее: 1. Убедитесь, что это глобальная переменная в test1. 2. Импортируйте test1 в интерактивном сеансе и выясните ошибку. 3. Дважды проверьте настройку среды.

Спасибо! :)

0 голосов
/ 09 июня 2019
Код

test1.py будет таким.

def H():
    global a
    a = "aaa"
H()

и код test2.py будет таким.

import test1 as o
global a
o.H()
print(o.a)

Это позволит вам позвонить на один тест H

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...