在诸多情况下,当我们在编写一个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 导入
与导入模块相似
网友评论