包、模块及 __name__ =="main"
代码组织方式
module模块式组织代码的基本方式;当.py脚本被import导入,将其称为模块module,所有的.py文件都可以理解为一个模块。
模块名与脚本.py文件同名,如 items.py作为模块import其他脚本中import items
Python模块可以按照目录组织为包Package。包是一堆按照目录组织的模块和子包,目录下的__init__.py
文件存放了包的信息,创建一个包package的步骤是:
–建立一个名字为package name的文件夹;
–在该文件夹下创建一个__init__.py
文件(可以为空);
–跟句需要在该文件夹下存放 脚本文件.py、已编译扩展及子包 .pyc .pyo
(编译后的2类文件也可以作为module导入)
# case
cal.py文件中定义了 + - * /几种算数运算函数jia(),jian(),cheng(),chu()
在usecal.py文件中调用算数运算的方法是:
import cal
cal.jia()
cal.jian()
问题思考?
但是会涉及一个问题,导入的模块内部本身可能已经定义了一些函数调用的执行(当其自身作为主函数main执行时),但当作为模块导入给其他py脚本时并不想执行module内的函数调用语句,如何解决?
也就是要区分 主调用方式python a.py
执行,与被 import 执行的不同
揭晓答案啦,思考过后再看哦
使用Python的一个内置属性,可以在module的py代码中加入 print(__name__)
,通过执行可以看出当module.py文件自身作为main主脚本执行时,__name__ ="main"
, 当作为module导入给其他脚本时,__name__= module_Name
.
if __name__ =="__main__"
statements
py脚本的执行机制:无论是import引用,还是python a.py方式,都会从脚本第一行开始向下执行完,但只有当python a.py的主调用方式时,会执行 if __name__ =="__main__"
.
*注意:因此如果脚本中有函数调用或操作数据,import时会执行到,但你并不知道,这种调试也很难发现,很隐蔽难以定位,这也是Python编程规范要避免的。
提取公共库module模块
如果很多函数经常用到的话,可以把他们封装到一个py文件中,然后通过调用模块的方式,导入这些函数。当模块文件很多,或者几个模块功能类似,就可以用包package来组织代码。
导入的时候 import 包名.模块名
import导入的3种常用方式:
import moduleName
import moduleName as nickName
from moduleName import funcName //此种import方式,func可以直接使用无需moduleName.func()