Skip to content

Latest commit

 

History

History
84 lines (52 loc) · 2.22 KB

File metadata and controls

84 lines (52 loc) · 2.22 KB

Module(模块)

通过 import 文件名来使用该文件中的内容

通常,1个文件就是1个模块,文件名就是模块名(建议全小写)

import

  • Import 模块 as 别名

  • Import 后面可以跟上多个模块名

import 模块1, 模块2, ...

建议 import 后面只导入1个模块

  • from 模块 import 名称 as 别名
  • from 模块 import 名称1, 名称2, ....
  • from 模块 import *

如果从不同模块导入了相同的名称,那么后导入的会覆盖掉前导入的

  • 可以通过__all__ = [名称1,名称2, ...] 控制 import * 的内容

导入模块

在1个python程序中
  • 有且只有1个模块作为程序入口被直接运行,我们称为主模块(main module)
  • 剩下的其他模块,只能作为辅助模块,被主模块直接或间接导入
不管模块被 import 多少次
  • 模块中的代码只会被执行1次
  • 模块只会被初始化1次
要避免循环导入
  • 比如A导入B,B导入A

模块的内置变量

  • __file__:模块的完整文件路径
  • __name__:
    • 当直接执行该模块时,值为:__main__
    • 当被其他模块导入时:值为:模块名

__name__ 使用

用于:在自定义模块文件中,编写测试代码,当该模块被其他模块引用时,如果没有测试代码不在if __name__ == '__main__':中,那么被引入时会被自动执行,但是当放置到if __name__ == '__main__':中则只会在当前模块中执行时才会运行

if __name__ == '__main__':
    test1(20, 10)

__all__使用

用于在自定义模块中,被__all__指定的函数名,在其他模块中通过import *导入该模块时,只会导入在__all__列表中指定的函数,未指定的则无法使用

# my_module1.py 文件
def test1(a, b):
    print(a + b)

def test2(a, b):
    print(a * b)

__all__ = ["test1", "test2"]

注意事项

不同模块都通过 import XX方式导入相同的xx名称,那么最后通过import XX 导入的部分会覆盖掉之前导入的部分

from my_module1 import test1
from my_module2 import test1

test1(10, 20) # test1实际执行的是来自my_module2中的test1函数实现