一.包
包就是文件夹,他用于存放文件也就是模块。包中也可以存放包
包就是一个包含了__init__.py文件的文件夹。
包只是模块的一种形式而已,包即模块。
二.包的导入:
分为import和from...inmort...两种
注意:1.凡是在导入时带点的,点的左边都必须是一个包,否则非法。可以带有一连串的点,如demo01.demo02.demo03,但都必须遵循这个原则。
2.对于导入后,在使用时就没有这种限制了,点的左边可以是包,模块,函数,类(它们都可以用点的方式调用自己的属性)。
3.对比import demo和from demo import name的应用场景:
如果我们想直接使用name那必须使用后者。
1.import导入:
2.from ... import ... 导入:
2.1. from 包名 import 模块名
使用方式:模块名.变量名() 或者 print(模块名.变量名)
2.2 from 包名.模块名... import 变量名
使用方式: 例如 变量名() 或者print(变量名)
2.3 from 包名.模块名... import 变量名1,变量名2,...
使用方式: 例如 变量名1() 或者print(变量名2)
2.4 from 包名 import 模块名,模块名1...
使用方式:模块名.变量名() 或者 print(模块名1.变量名)
需要注意的是from后import导入的模块,必须是明确的一个不能带点,否则会有语法错误,如:from a import b.c是错误语法
3.__init__.py文件
不管是哪种方式,只要是第一次导入包或者是包的任何其他部分,都会依次执行包下的__init__.py文件(我们可以在每个包的文件内都打印一行内容来验证一下),这个文件可以为空,但是也可以存放一些初始化包的代码。
4.from 包.模块 import *
使用__all__=[] 变量。
三.包的绝对导入和相对导入
1.绝对导入:以base作为起始
测试:
2.相对导入:用.或者..的方式最为起始(只能在一个包中使用,不能用于不同目录内)
测试: