关于 python 的 if __name__ == ‘__main__‘ 你知道多少?

在诸多情况下,当我们在编写一个Python测试脚本或是Java转型而来的程序员们,往往偏爱撰写 if name == '__main__' 的语句。然而,对于 if name == '__main__',我们究竟了解多少呢?

首先,这是一条判断语句,其中的 _name_ 变量具有两种可能的取值情况:

1.当某个Python文件单独执行时,_name_变量的值为 _main_

2.当某个Python文件被导入至其他程序时,该py文件内部的_name_变量的值与py文件的名称相同。

如此便能确保仅在文件单独执行的情况下运行特定代码,而在其他程序中导入该模块时,避免主函数被执行。此种用法的主要目的在于使一个模块既能够作为独立的程序运行,亦可被其他模块导入和调用。在实际编程过程中,我们通常会在 if name == '__main__' 语句块中写入一些测试代码,以便在开发和调试阶段直接运行这个模块,而在其他模块中导入时避免执行这些测试代码。

既然提到了模块,那么在此补充几点相关内容:

模块module:

module介绍

1.module本质上是一个Python程序,以.py作为文件扩展名。任何py文件皆能作为一个模块。

2.除Python外,其他可作为module的文件类型还包括"so"、“pyo”、” pyc"、“dylib”、“pyd”

3.借助模块,我们可以有效避免命名空间的冲突,屏蔽代码细节以便我们更加专注于高层逻辑的实现,同时也可以将一个大型程序分割为多个文件,大大提高代码的易维护性和可复用性。

module 注释

模块的详细文档应置于py文件的开头处,并用成对的三个英文单引号进行标识:

‘’’

模块的说明文档

‘’’

module导入

常见的导入模块的方法有两种:

1. import module1[as alias1], module2[as alias2],… 在此种情况下,模块名1本身得以导入保存,但保留原有命名空间,因此需以 “module1 member1” 的方式访问其函数或变量。

2. from module1 import member1[as alias1], member2[as alias2],… 此时,模块的函数/变量会被引入当前模块的命名空间,无需再使用 “module1 member1” 来访问。

其中,用 [ ] 括起来的部分可以随意省略。但请注意尽量避免使用 from xxx import * 的方式进行导入,以免出现名称重复的问题。

包 package

package 介绍

Python的包,即包含一个 _init_.py 文件的文件夹。

1.自身即是一个模块:

2.此模块的名称即为此包的名称

3.其主要功能为将一个文件夹转变为一个Python模块

4.在没有任何代码的情况下,基本失去其存在的价值。因此在大多数情况下,_init_py中会融入一些Python初始化代码,以便在引入此包时,这些代码能够自动执行。例如:一次性导入我们所需的所有模块,无需在使用时逐一导入,极大地方便使用。

5.不建议在_init_.py 中定义类结构,以保持其简洁性。

_all_ 是Python中的一个重要变量,常位于 init.py 文件中,用于指定此包(package)在被import *时,哪些模块(module)会被导入;未纳入 _all_列表中的模块将不会被其它程序所引用。

_path_ 同样是一个在Python中频繁使用的变量,负责存储当前包的搜索路径。在默认情况下,其值即为当前包的路径。

package 导入

与导入模块相似

你可能感兴趣的:(python,python,windows,开发语言,计算机,互联网,程序员,面试)