模块与包

#
# 模块
#
# 模块一共三种:
#
# 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是错误语法
原文地址:https://www.cnblogs.com/z-x-y/p/7096019.html