执行指定脚本时运行的导入模块

时间:2017-09-30 23:38:44

标签: python python-3.x

我在main.py文件的头部有几个导入。

from python_elements import statistics
from python_elements import trade
from python_elements import advisory

当我执行main.py时,代码行initial_action = input("action: ")应输出提示,如下所示:

action:

但是,提供了导入脚本之一advisory.py中内置的提示,导致我在运行main.py时输出如下所示:

symbol:

因为advisory.py顶部的相应代码如下所示:

symbol = input("symbol: ")

我不确定为什么导入语句会导致这些行首先运行,所以我错过了什么?

1 个答案:

答案 0 :(得分:2)

作为顶级/全局范围的一部分的任何代码都将在导入时执行。这就是如何创建类,函数等 - 通过执行定义它们的代码。

您应该编写您希望导入的模块,其中包含一个防止导入时不需要执行的保护条件。下面是一个示例,假设模块文件名为example.py

class C:
    pass

def func():
    pass

print(__name__)
if __name__ == '__main__':
    symbol = input("symbol: ")

如果要将模块作为带有python example.py的脚本运行,Python会将特殊__name__变量的值设置为字符串"__main__",并且print语句将输出{ {1}}。在这种情况下,__main__语句正文中的代码将被执行,因为条件if将为True。 `

但是,如果使用__name__ == '__main__'导入模块,import example将设置为模块的名称(在我们的示例中为__name__),并且print语句将输出{{1 }}。定义类和函数的代码仍将被执行,但example语句的主体中的代码被阻止由条件example运行,该条件为False。