我在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: ")
我不确定为什么导入语句会导致这些行首先运行,所以我错过了什么?
答案 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。