Как обмениваться переменными между различными файлами Python? - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть 2 файла Python file1.py и file2.py в одном каталоге.

#file1.py

import file2 as f2

graph={ 0: [1,2],
        1: [0,3,2,4],
        2: [0,4,3,1],
        3: [1,2,5],
        4: [2,1,5],
        5: [4,3]
      }

def function1(graph):
   print(f2.C1)

Другой файл -

#file2.py

import file1 as f1

graph=f1.graph

def function2(graph):

#Perform some operation on graph to return a dictionary C

    return C


C1=function2(graph)

Когда я запускаю file1, я получаю сообщение об ошибке

module 'file2' has no attribute 'C1'

И когда я запускаю file2 и пытаюсь проверить значение переменной C1, я получаю сообщение об ошибке:

module 'file1' has no attribute 'graph'

Что я должен сделать, чтобы правильно импортировать эти файлы, чтобы соответствующим образом обмениваться значениями между файлами?

Обратите внимание, что когда я реализую переменную graph в file2 напрямую, а не извлекаю из file1, она работает отлично, но начинает возникать проблема при обмене переменными между файлами.

Отредактировано:

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

#file1

import file2 as f2

def fun1(graph):
   C=[None]*20
    for i in range(20):
        # Some algorithm to generate the subgraphs s=[s1,s2,...,s20]
        C[i]=f2.fun2(s[i]) 
        print(C[i])



graph={ 0: [1,2],
        1: [0,3,2,4],
        2: [0,4,3,1],
        3: [1,2,5],
        4: [2,1,5],
        5: [4,3]
      } 

def getGraph():
    return graph

fun1(graph)

Другой файл file2.py

import file1 as f1


graph_local=f1.getGraph()

#Some operations on graph_local to generate another graph 'graph1' of same "type" as graph_local

def fun2(graph1):

   #Perform some operation on graph1 to return a dictionary C

    return C

Если я создаю test.py, как упомянуто здесь ,

#test.py

from file1 import fun1

fun1(None)

Когда я запускаю test.py или file2.py, возникает ошибка

module 'file1' has no attribute 'getGraph'

тогда как при запуске file1.py,

module 'file2' has no attribute 'C'

1 Ответ

0 голосов
/ 16 апреля 2019

Просто избегайте глобальных переменных, которые создаются при импорте.

Ниже я использовал функции в качестве методов доступа, которые задерживают разрешение символов:

test.py:

from file1 import function1

function1(None)

file1.py

import file2

# I have retained graph here
graph={ 0: [1,2],
        1: [0,3,2,4],
        2: [0,4,3,1],
        3: [1,2,5],
        4: [2,1,5],
        5: [4,3]
      }

def getGraph():
    return graph
def function1(graph):
   print(file2.getC1())

file2.py

import file1 as f1

# graph=f1.getGraph()

def function2(graph):
    graph[6]='Added more'
    #Perform some operation on graph to return a dictionary C

    return graph


def getC1():
    return function2(f1.getGraph())

Когда я запускаю test.py, я получаю такой вывод:

{0: [1, 2], 1: [0, 3, 2, 4], 2: [0, 4, 3, 1], 3: [1, 2, 5], 4: [2, 1, 5], 5: [4, 3], 6: 'Added more'}
...