这是我的模块:
test1.py
regions=["a","b","c"]
print "from test1 module"
test2.py
from test1 import regions
print "from test2 module", regions
运行test2.py
python test2.py
from test1 module
from test2 module ['a', 'b', 'c']
我看到来自print
的{{1}}语句已被调用,但我只从test1.py
导入regions
列表。对于要执行的所有内容,我不会说test1.py
。
1)为什么它会执行import test1.py
文件中的所有内容(当然不包括test1.py
)。
2)如何在不执行所有其他陈述的情况下__name__==__main__
import
来regions list
?
我不知道导入是如何工作的,我已经在这个问题上工作了3天。
答案 0 :(得分:4)
这就是进口的运作方式。
def my_function():
print("Hello")
上面的代码片段是什么?它确实是一个函数定义,但Python中的函数定义是语句,它们必须执行才能定义函数。因此,当您导入上述模块时,执行 def
,这会创建一个新函数并将其分配给my_function
。它基本上与:
my_function = ...definition..
因此,当您导入模块时,总是执行其内容。否则,您将无法使用该模块中的任何函数(或类)。
还有其他方法可以在Python中定义函数。
def create_my_function(x):
def local_function():
print(x)
global my_function
my_function = local_function
create_my_function("Hello")
这大致相当于my_function()
的原始定义。
由于您可以在Python模块中放置任何语句,因此Python无法知道必须执行哪些语句才能定义您感兴趣的符号。因此它必须执行所有语句。
答案 1 :(得分:3)
Python需要执行模块中的所有语句,因为它们可能具有相关的副作用。例如,考虑
a = 2
b = a*3
如果从该模块导入b会怎样? 通常,除了main之外的模块不应该具有导入时有害的副作用。通常,模块应该定义类,函数和变量,但不应该执行诸如打开文件,连接数据库等操作。
答案 2 :(得分:1)
这是导入的工作方式 - python在导入时执行模块。这有它的用途,因为您可以包含验证依赖项的功能,或在导入模块实际调用任何类之前初始化功能。