Python个人学习笔记 模块

来源:哔哩哔哩   时间:2023-05-16 12:50:35

模块

每个Python文件至少有一个模块。模块也是对象,每个模块都具有各自的属性。可以用dir()来查看属性。其中 __name__ 属性为当前模块的名字。


(相关资料图)

dir()

返回一个字符串列表,其中包含指定对象的所有属性和方法的名称。

如果未提供对象,则返回当前作用域中的所有名称。

模块导入

像导入库一样,可以通过import来导入其他的Python源文件(模块),不需要加.py后缀。

可以通过导入,来使用其他模块定义的函数、变量等。但是模块级代码在运行时会被直接运行。

▲① 避免交叉导入,即2个(或多个)源文件尽量不要互相导入。

② 避免重复导入,A导入了B,B导入了C,那么C就不应该导入A。

③ 被导入的文件名不能以数字开头。

不能与Python的保留关键字相同,如 if、for 等。

文件名应尽量避免使用与Python内置模块或常用模块相同的名称,以避免命名冲突,如 math、random 等。

为什么先输出3?

当导入一个模块时,Python解释器会检查是否已经将该模块加载到内存中。如果模块已经加载,它会跳过加载过程,并直接引用已加载的模块。在加载和编译模块的过程中,模块级别的代码(非函数和类定义)会被执行。

因此,当导入一个模块时,模块级别的代码会被最先运行。如果同一个模块被多次导入,Python会直接引用已加载的模块对象,不会重新执行模块级别的代码。

主模块

运行Python源文件时,当前Python文件将作为主模块,__name__ 属性会被重命名为 __main__。

导入的模块就不是主模块。

所以当交叉导入当前文件时,就算是当前文件也不会是__main__。

if __name__=='__main__':

如果某些语句需要作为主模块时才被执行,不想被被导入时执行,可以用该语句。

也就是当运行 模块.py ,而不是被导入时,才会执行 if __name__=='__main__': 中的语句。

__all__

模块同样支持 * 导入。

当使用*导入模块时,可以用 __all__ 来控制访问权限。未赋值时默认*导入所有符号。

__all__为一个列表。赋值后,* 只能导入__all__中的符号。

未在 __all__ 中里符号可以通过单独导入来引用。

私有变量

以下划线开头的变量为私有变量(魔术方法除外),当用*导入时私有变量不会被导入。但是可以通过单独导入来引用。

最新资讯

业界