Python中模块 & 文件夹与包 & 循环导入

1、简单定义

理解: 在Python中,模块是代码组织的一种方式,把功能相近的函数放到一个文件中,一个文件(.py)就是一个模块(module)。模块名就是文件名去掉后缀py。
好处 :提高代码的可复用、可维护。一个模块编写完成后,可以更方便的在其他项目中导入。解决了命名冲突,不同模块中相同的命名不会冲突。

2、自定义模块

import 模块名
    #调用
    模块名.变量  、模块名.函数 、模块名.类
或者
from 模块名 import 变量、函数、类(导入模块中的某一部分)
    在代码中可以直接使用变量、函数、类
或者
from 模块名 import *
    导入模块中的所有内容,
    但是如果想限制获取的内容,可以在模块中使用__all__ = [使用*可以访问到内容],但前提是都会加载进来。   #可以理解为白名单
    

特别注意: 无论是import还是from的形式,都会将模块内容加载进来。如果不希望其进行调用,就会用到__name__,在自己模块中__name__叫:__main__。如果在其他模块中通过导入的方式调用的话:__name__:模块名。

3、标准模块

可以参考: python标准模块

4、文件夹与包

  1. 基本概念

    文件夹:非py文件
    包:.py文件,一个包中可以存放多个模块。
    from 包 import 模块
    或者
    from 包名.模块 import 变量、函数、类
    
    from 包 import * 表示该包中内容(模块)是不能直接访问的,需要加 __all__ = ['模块名''模块名'] 才能直接调用模块。
    
    即使在同一个包下的模块导入也要引入包名。也可以使用   .模块名表示同级模块(在同一个包中)
    
    
  2. __init__.py文件
    任何包中的__init__.py文件,当导入包的时候,默认首先调用__init__.py文件,并加载到内存!

    作用:
    1.当导入包的时候,把一些初始化的函数,变量,类定义在__init__.py文件中。
    2.此文件中函数,变量等的访问,只需要通过包名,函数....
    3.结合__all__ = [通过* 可以访问的模块]
    

5、循环导入

循环导入:大型的python项目中,需要很多python文件,由于架构不当,可能会出现模块之间的相互导入。

A:模块
def test():
    f()
B:模块
def f():
    test()

避免产生循环导入:

  1. 重新架构(工作量大,成本高)
  2. 将导入的语句放在函数里面
  3. 把导入语句放到模块的最后(if __name__ == ‘main’)
发布了84 篇原创文章 · 获赞 36 · 访问量 4542

猜你喜欢

转载自blog.csdn.net/qq_41475583/article/details/104983831