目录
一、包
在我们的项目中,可能会有太多的模块
但是我们不能把所有的模块这样放在这里,这样项目会乱七八糟。
我们可以将所有相同类型的模块放在一个文件夹中,这个文件夹就叫做包
包就是文件夹,他用于存放文件也就是模块。包中也可以存放包
包就是一个包含了__init__.py文件的文件夹。
包只是模块的一种形式而已,包即模块。
包的结构:
包
|----__init__.py 包的标志文件
|----模块一
|----模块二
|----子包(文件夹)
|----|----__init__.py
|----|----子模块一
|----|----子模块二
二、包的导入
1.关于包相关的导入语句也分为import和from ... import ...两种,但是无论哪种,无论在什么位置,在导入时都必须遵循一个原则:凡是在导入时带点的,点的左边都必须是一个包,否则非法。可以带有一连串的点,如demo0demo02.demo03,但都必须遵循这个原则。
2.对于导入后,在使用时就没有这种限制了,点的左边可以是包,模块,函数,类(它们都可以用点的方式调用自己的属性)。
3.对比import demo和from demo import name的应用场景:
如果我们想直接使用name那必须使用后者。
1.import 导入
在demo01_test02.py 中 导入 demo01_test01.py
demo01_test01.py 源码:
def say():
print('demo01_test01_hello')
name = '赵四'
demo01_test02.py 源码:
import base.demo01.demo01_test01
base.demo01.demo01_test01.say() # 调用test01中的say方法 输出 demo01_test01_hello
import sys
print(sys.path)
#['D:\\pycharm工作空间\\day12\\base\\demo01', 'D:\\pycharm工作空间\\day12', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\python36.zip', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\DLLs', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\lib', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages\\win32', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages\\win32\\lib', 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages\\Pythonwin', 'C:\\Program Files\\JetBrains\\PyCharm 2018.3.2\\helpers\\pycharm_matplotlib_backend']
2.from...import...导入
from 包名.模块名... import 变量名
使用方式: 例如 变量名() 或者print(变量名)
demo01_test02.py 源码:
from base.demo01.demo01_test01 import say
say() # demo01_test01_hello
from 包名.模块名... import 变量名1,变量名2,...
使用方式: 例如 变量名1() 或者print(变量名2)
demo01_test02.py 源码:
from base.demo01.demo01_test01 import say,name
say()
print(name) # 调用test01中的name变量
from 包名 import 模块名
使用方式:模块名.变量名() 或者 print(模块名.变量名)