python中包和模块的异同
区别
1.模块(module)
任何以.py结尾的Python文件都是模块(package),模块的名字就是文件名(不加.py),不过有时候模块的名字也可以通过模块的__name__重新指定。它包含了一些函数、类、变量等定义,可以被其他程序引用。模块的作用是将代码分离成独立的、可重用的单元,使得程序更易于维护和扩展。
导入模块
import 模块名
from 模块名 import 功能名/函数名/类名/方法名
from 模块名 import *
有时候,我们希望导入一个模块中的所有变量,以便在代码中更方便地使用。这种方式虽然方便,但是不推荐使用。因为它可能会导致命名空间冲突,从而使得代码难以理解和维护。
特殊
init.py文件,本身是一个模块;这个模块的模块名不是__init__,而是这个包的名字,也就是装着__init__.py文件的文件夹的名字;一般会包含一些Python初始化代码,在这个包被import的时候,这些代码会自动被执行。
2.包(package)
包是多个模块的组合,如果一个文件夹下包括多个.py文件和一个__init__.py文件,那么这个文件夹就算是一个包。包可以嵌套到任何深度,只要相应的目录包含它们自己的__init__.py文件。包的作用是将相关的模块组织在一起,使得程序更加模块化和可扩展。
导入包
import 包名 (仅仅可以使用init.py中的全部内容)
import 包名.模块名 (导入包中的某些模块)
一个包可以包含多个模块,而一个模块也可以被多个包引用。包是特殊的模块,相比于普通模块,由于它是文件夹,所以多了一个__path的属性。下图是我的numpy的路径属性测试。
当我们导入模块或包时,Python创建的相应对象始终是模块类型。也就是说无论是一个.py文件(模块)还是一个文件夹(包),一旦被导入之后,它的类型都变成了模块(可以通过type(module_name)来测试一下)
导入函数和变量
from 模块名 import 方法名/函数名/类名/变量
from 模块名 import 方法1,方法2,方法3
from 包名.模块名 import 方法名
from 包名.模块名 import 方法名 as 别名
命名规范区别
模块命名规范
1.使用小写,不 能使用大写,不能使用中文,不能使用特殊字符
2.自己命名的模块不要与内置模块起冲突,比如sys、random、time等等。一旦重名,python解释器会先查询内置模块看是否有需要导入的模块,再从sys.path所包括的文件夹查询模块名字。所以,如果自定义模块名字与内置模块名字重合会被内置模块名字覆盖掉。
参考:https://blog.csdn.net/weixin_41490373/article/details/109324809