Python 3.x 为什么Python模块只执行函数/类代码之外的第一次代码
文件words.pyPython 3.x 为什么Python模块只执行函数/类代码之外的第一次代码,python-3.x,import,module,Python 3.x,Import,Module,文件words.py def print_word(): print("Hello Words") print(__name__) 当我从控制台运行上述代码时: (base) C:\Users\Desktop\Python>python words.py __main__ (base) C:\Users\Desktop\Python>python words.py __main__ (base) C:\Users\Desktop\Python>python w
def print_word():
print("Hello Words")
print(__name__)
当我从控制台运行上述代码时:
(base) C:\Users\Desktop\Python>python words.py
__main__
(base) C:\Users\Desktop\Python>python words.py
__main__
(base) C:\Users\Desktop\Python>python words.py
__main__
(base) C:\Users\Desktop\Python>python
Python 3.7.3 (default, Apr 24 2019, 15:29:51) [MSC v.1915 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from words import *
words
>>> from words import *
>>>
为什么在导入过程中它只执行一次print,但在运行python words.py时它执行print的次数与我们执行的次数相同?导入模块时,python会创建该模块的模块实例 在第一次导入之后,解释器已经有了该模块的一个实例,因此它不执行任何操作 Python的导入文档: 当第一次导入模块时,Python搜索该模块,如果找到该模块,它将创建一个模块对象,并对其进行初始化 您可以阅读有关模块加载过程的更多信息:
- 如果sys.modules中存在具有给定名称的现有模块对象,则导入将已返回该对象
- 在加载程序执行模块代码之前,模块将存在于sys.modules中。这是至关重要的,因为模块代码可能(直接或间接)导入自身;预先将其添加到sys.modules中可以防止在最坏的情况下出现无界递归,在最好的情况下防止多次加载