【问题标题】:How to import list from main.py to task.py with Python 3 PyCharm?如何使用 Python 3 PyCharm 将列表从 main.py 导入 task.py?
【发布时间】:2020-02-06 12:42:09
【问题描述】:

如何在 task.py 中使用 main.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'

【问题讨论】:

标签: python python-3.x list import pycharm


【解决方案1】:

您正在创建一个循环依赖项(参见例如this explanation),这是您通常想要避免的。

程序流程大致如下:

  • 您拨打python main.py
  • 执行import task,从task.py加载print_func
  • 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. 我不明白您为什么要从 main 导入 list_list 以在 task.print_func 中使用 - 我认为将列表作为参数传递会更好。
  2. 在要导入其他位置的 python 文件中,在缩进级别 0 上执行尽可能少的代码。阅读例如这里:What does if __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)

【讨论】:

    【解决方案2】:

    你必须使用下面的代码。

    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)
    

    【讨论】:

      猜你喜欢
      • 2016-11-21
      • 1970-01-01
      • 2023-01-06
      • 1970-01-01
      • 1970-01-01
      • 2018-02-23
      • 2019-05-10
      • 2014-12-31
      • 2017-05-17
      相关资源
      最近更新 更多