Как импортировать список из main.py в task.py с Python 3 PyCharm? - PullRequest
0 голосов
/ 09 октября 2019

Как я могу использовать список из main.py, в task.py? Код ниже.

main.py:

import task.py
list_list = ["test1","test2"]
task.print_func()

task.py:

from main import list_list
def print_func():
     for x in list_list:
          print(x)

Таким образом, я получил следующую ошибку:

AttributeError: модуль 'task' не имеет атрибута 'print_func'

Ответы [ 2 ]

2 голосов
/ 09 октября 2019

Вы создаете циклическую зависимость (см., Например, в этом объяснении ), чего вы обычно избегаете.

Ход программы будет примерно следующим:

  • Вы звоните python main.py
  • import task выполняется, чтобы загрузить print_func из task.py
  • task.py выполняется, возвращаясь прямо к main.pyдля извлечения list_list ...

Чтобы устранить проблему, вы можете сделать следующее:

main.py:

import task
list_list = ["test1","test2"]

# Only run this, if main.py is run directly, not in import
if __name__ == "__main__":
    task.print_func()

task.py: (без изменений)

from main import list_list
def print_func():
     for x in list_list:
          print(x)

Это изменение позволяет task.py импортировать list_list без попытки выполнить task.print_func, который не может быть определен в данный момент (так как его определение зависит от list_list).

Некоторые общие замечания:

  1. Я не понимаю, почему вы хотите импортировать list_list из main для использования в task.print_func - лучше передать список в качестве аргумента вмое мнение.
  2. Выполните как можно меньше кода на уровне отступа 0 в файле Python, который вы хотите импортировать в другое место. Прочитайте, например, здесь: Что делать, если __name__ == "__main__": do? для некоторых деталей.

Учитывая все вышесказанное, я бы сделал это следующим образом:

main.py

import task

if __name__ == "__main__":
    list_list = ["test1","test2"]
    task.print_func(list_list)

task.py:

def print_func(list_list):
     for x in list_list:
          print(x)
0 голосов
/ 09 октября 2019

Вы должны использовать приведенный ниже код.

main.py

import task
list_list = ["test1","test2"]

if __name__=="__main__":
    task.print_func()

task.py

from main import list_list

def print_func():
     for x in list_list:
          print(x)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...