模块与包
# 一 # 模块 # # 模块一共三种: # # python标准库 # 第三方模块 # 应用程序自定义模块 # # 模块两种执行方式: #用于启动执行 #用于被调用执行 # 调用方式1 (推荐) # import module1 # import module2 # 调用方式2 # import module1,module2 # import time,sys,os # 执行被调用的模块 (第二次不会被执行) # 一个模块可以在当前位置import多次,但只有第一次导入会执行源文件内的代码,原因是:第一次导入就会将模块包含的内 # 容统统加载到内存了,后续的import语句仅是对已经加载到内存中的模块对象增加了一次引用,不会重新执行模块内的语句 # from module1 import * # 慎用 # 当你想限制*导入的内容的时候,可以在模块中添加以下语句__all__=[] # 中括号中写的字符串形式的变量就是指定*可以导入命名 # 语句提供了一个简单的方法来导入一个模块中的所有项目。 # 然而这种声明不该被过多地使用。大多数情况, Python # 程序员不使用这种方法,因为引入的其它来源的命名,很可能覆盖了已有的定义。 # 总结模块的查找顺序是:内存中已经加载的模块->内置模块->sys.path路径中包含的模块 # 编辑起始路径 # import os,sys # BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # print(BASE_DIR) # sys.path.insert(0,BASE_DIR) # 在python中,包可以理解成一个文件夹,但是每一个文件夹里必须要有一个__init__文件 # 只要是第一次导入包或者是包的任何其他部分,都会依次执行包下的__init__.py文件 # 编译python文件 # 当模块导入的时候会在模块文件内部产生一个pyc文件,这个文件是python的预编译文件, # 当下次读取的时候就会加速,这样就可以提高模块导入的时候的执行效率(只有导入模块的时候才会生成这个文件) # 关于__name__ # 当文件本身运行自己的时候__name__=__main__ # 单文件被当作模块调用的时候__name__=文件名 # 一般当你的代码是个测试代码,不想被别人调用的时候可以加上判断语句 # if __name__=__main__: #要执行的代码 # 无论是import形式还是from...import形式,凡是在导入语句中(而不是在使用时)遇到带点的,这是关于包才有的导入语法 # 凡是在导入时带点的,点的左边都必须是一个包 # 对于导入后,在使用时就没有这种限制了,点的左边可以是包,模块,函数,类(它们都可以用点的方式调用自己的属性)。 # 需要注意的是from后import导入的模块,必须是明确的一个不能带点,否则会有语法错误,如:from a import b.c是错误语法