|-direct
|-plane
|-__init__.py
|-modules.py
|-tools.py
|-tank
main.py
utils.py
main.py:
# 在自身文件夹下import 引入其他模块
import utils
# 引入其他包中的某个模块
import plane.tools
# 直接import的方式可以引入包,可以引入模块,最低级就是引入模块级别的文件,不能使用import方式直接导入模块中的变量,函数,类型,因为import方式它会把最后一个当成模块级别的文件来判断,结果就找不到这个对应的模块了,下面这种方式就是错误的方式
使用import方式引入相应的模块之后,可以使用如下的方式操作引入的模块中的数据:
模块.变量
模块.函数
模块.类型
|-direct
|-main.py
|-utils.py
main.py:
# 直接引入的方式,
import utils
使用Import的方式寻找引入模块的路径是(所有绝对引入的查询路径):
, 这样后半部分会报错,要把包名称写在前面,如:
from .plane import utils
print(utils.msg)
- 相对引入引入包中的模块中的具体代码方法/函数/类型
from .plane.utils import func
func()
——————————————————————————————————————————————————————
绝对引入:
main.py:
- 最直接的绝对引入整个包(但是同样引入整个包和相对引入整个包一样需要在该包的__init__.py中定义要使用包中的哪些数据,后边才能正常使用引入的包,否则会报错找不到包下的那个模块)。
import plane
print(plane.utils.msg)
绝对方式引入包中的模块或者具体数据就不需要在该包的__init__.py声明文件定义任何东西就可以使用包中的数据
- 绝对引入的方式引入包中的模块
from plane import utils
3. 绝对引入的方式引入包中的模块的具体数据
from plane.utils import msg
print(utils.msg)
print(msg)
——————————————————————————————————————————————————
无论是相对引入和绝对引入,使用from a import b的最后的位置都是只有一个模块名或者具体数据名,如果有多个前缀都要放到前边的from中。
可以给引入的名称比较长的模块路径起一个别名,例如:
import plane.utils as pu
还有一种引入的方式,模糊引入:
from 包名称 import *
这是一个语法糖,慎重使用
如果项目中需要引入的包文件不多的话, 可以参考使用
如果项目中需要引入的包文件非常庞大,不要使用模糊引入,会严重消耗系统资源
同时使用模糊引入的话需要在引入的包中的声明文件__init__中定义*所包括本包下的哪些模块。这时有一个模块定义属性: __all__, 值是一个列表,表示通过模糊引入方式直接导入all中定义的所有模块,是写在包的__init__声明文件中的,例如:
__all__ = [“utils”, “modules”, “tools”], 意思就是通过模糊引入的方式,直接可以引入包中的哪些模块,直接定义在__all__中就可以了
集成开发环境(IDE,Integrated Development Environment )是用于提供程序开发环境的应用程序也就是程序开发工具。
IDLE 是一个纯 Python 下自带的简洁的集成开发环境(IDE) [1] 。
——————————————————————————————————————————————————————
小总结
1. 模块和包
模块:python中每个python文件都是一个独立的模块
较少的、独立的、功能近似的 多个变量、函数、类型的集合!
包:包含多个python模块的文件夹,包含一个特殊的__init__.py声明文件
包含多个模块,具备强大功能的程序!
包 & 文件夹 区别
包:包含了一个__init__.py声明文件[空文件、编写代码]
文件夹:普通文件夹
区别1:包可以更加有效的管理python模块,文件夹只能作为默认包进行基本管理[包含文件]!
区别2:包和文件夹中引入对应的模块代码的操作方式区别!
2. import & from import
包和模块的引入
(1) import
#引入一个模块
import 模块名称
#使用模块中的数据
模块名称.变量名称
模块名称.函数名称
模块名称.类型名称
# 引入一个包
import 包名称
# 使用包中的数据
包名称.模块名称.变量名称/函数名称/类型名称
# 引入包中的某个模块
import 包名称.模块名称
# 使用包中的数据
包名称.模块名称.变量名称/函数名称/类型名称
# ERROR:引入包中的某个变量
import 包名称.模块名称.变量名称
(2) from import语法
# (相对)引入包
from . import 包名称 [必须在__init__.py中,主动通过from . import引入需要的模块]
# 使用数据
包名称.模块名称.变量名称/函数名称/类型名称
# (相对)引入包中的模块
from .包名称 import 模块名称
# 使用数据
模块名称.变量名称/函数名称/类型名称
# (相对) 引入包中的模块中的数据
from .包名称.模块名称 import 变量/函数/类型
# 使用数据:当成当前文件中的数据进行数据
变量名称/函数名称/类型名称
3. 相对引入 & 绝对引入
相对引入:相对当前文件路径,参照父级文件路径
|-- demo/
|-- utils.py
|-- main.py [from . import utils]
运行:添加参照路径:python -m demo.main
运行过程中,在main.py中找到相对路径的utils.py
绝对引入:针对包/项目/模块,直接引入的方式
|-- demo/
|-- users/
|-- __init__.py
|-- tools.py
|-- utils.py
|- main.py
[import utils]
[from users import tools]
[绝对引入:查询路径]
[当前文件夹|PYTHONPATH|sys.path]