我创建了一个文件,转向其他文件并连续运行它们的脚本。这些文件中的大多数都有一个共同的参数,这是一个输入。当我导入它时,它(当然)请求输入。我希望避免重新输入某些内容。
示例:
MainFile.py:
import Base_params
import Liner
Base_params.py:
no_of_slices=int(input('Enter no. of Slices'))
sub_slice=int(input('enter sub slice'))
Liner.py:
from PIL import Image
import shutil
from Base_params import no_of_slices, sub_slice
答案 0 :(得分:0)
简短的回答是Python已经完全按照你想要的方式为你处理了这个问题。为了理解原因,让我给你一些关于import system的背景知识。
首次导入模块时,会创建一个空模块对象。然后执行其代码,并将绑定的任何名称放在其字典中,该字典也是模块的全局命名空间。在您的情况下,这意味着运行代码Base_params.py
并根据用户输入创建名称no_of_slices
和sub_slice
。
随后导入相同的模块时,其代码不运行(这是您关心的问题)。而是返回sys.modules
的对象引用。在尝试再次运行模块之前,import语句始终会检查模块是否已加载。
创建空模块对象(并在运行模块代码之前将其置于sys.modules
中)非常重要的原因是大多数模块都具有递归导入。将模块标记为已导入可确保任何无限循环被破坏在它们发生之前。
在您的情况下,定义一个要求用户输入的常量模块是完全正确的。执行import Base_params
的第一个模块将触发input
语句的执行。所有进一步出现的import Base_params
只会将sys.modules['Base_params']
绑定到命名空间中名称Base_params
的任何内容。 no_of_slices
和sub_slice
不会有第二个查询。
我提供的官方文档的链接将解释我错过的任何内容。