- 1. 导入模块
- 2. 导入包
- 3. 知识点总结
- 4. 购物车购买商品
- 5. 购物车结算商品
main.py
# ### import 导入模块
# 默认会找main.py同级路径下有没有mydule这个文件
import mymodule
import mymodule
import mymodule
"""注意点:模块导入时,导入一次,终身受益,并不会重复导入"""
# 1.import导入的基本使用
"""
# (1) 模块.变量
print(mymodule.cat)
# (2) 模块.函数
mymodule.jump()
# (3) 模块.类
print(mymodule.Classroom().name)
"""
# 2.导入任意模路径下的任意模块
"""
默认导入当脚本文件同级目录下的模块等..
系统执行流程:首先看一下sys.path里面有没有想要导入的这个模块路径,
如果有,默认导入,如果没有,需要手动追加
"""
import sys
print(sys.path)
"""
[
'D:\python32_gx\day19\import_bao',
'D:\python_lianxi',
'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'
]
[
'/mnt/hgfs/python32_gx/day19/import_bao',
'/home/wangwen/pylianxi',
'/usr/lib/python36.zip',
'/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload',
'/usr/local/lib/python3.6/dist-packages',
'/usr/lib/python3/dist-packages'
]
"""
"""
sys.path.append(r"D:python32_gxday14")
import mymodule2
print(mymodule2.bird)
"""
# 3.from .. import .. 基本使用
"""from .. 从哪里 import .. 引入具体的某个成员"""
# 导入单个成员
# from mymodule import dog
# print(dog)
# 导入多个成员
# from mymodule import jump,lookdoor
# jump()
# lookdoor()
# 导入所有成员 *带有所有
# from mymodule import *
# print(dog)
# print(cat)
# 设置*号导入的范围
# from mymodule import *
# print(dog) # error
# print(cat)
# 设置引入成员的别名 as
from mymodule import cat as c , lookdoor as ld
print(c)
ld()
# 4.__name__的使用
"""
#返回模块名字的魔术属性 __name__
如果当前文件是直接运行的,返回"__main__"字符串
如果当前文件是间接导入的,返回当前文件名(模块名)
"""
# res = __name__
# print(res,type(res))
mymodule.py
# 可以手动指定*的引入范围 __all__
__all__ = ["cat"]
cat = "甜甜"
dog = "旺财"
def jump():
print("小猫能上树")
def lookdoor():
print("小狗能看门")
class Classroom():
name = "python32"
print("我是mymodule模块")
print("<======1=====>")
print(__name__)
print("<======2=====>")
"""
把需要引入的代码写在if判断的上面
把需要做简单测试的代码,不需要引入的代码写在if判断的下面,防止导入;
"""
if __name__ == "__main__":
print("<======3=====>")
jump()
lookdoor()
print("<======4=====>")
2. 导入包
main2.py
# ### import 导入包 """ 文件夹:包 文件:模块 当引入包时,会自动指定包中__init__.py的初始化文件,对包进行初始化 """ # 1.import引入包的语法 # import package1 # 导入包的属性 # print(package1.ceshi1) # 导入包下的某个模块 # 方法一 # import package1.mywork # package1.mywork.myjoin() # 方法二 as 起别名 # import package1.mywork as pm # pm.myjoin() # 方法三 把要引入的模块放到初始化文件当中进行引入,简化操作 # import package1 """os.path.getsize()""" # package1.mywork.mygetsize() # 2.from .. import .. 引入包中具体的成员的语法 # 引入包中的属性 # from package1 import ceshi2 # print(ceshi2) # 可以指定*号的范围 用__all__ # from package1 import * # print(ceshi2) error # print(ceshi3) # 可以用as起别名 # from package1 import ceshi2 as c2,ceshi1 as c1 # print(c1) # print(c2) # 引入包中的模块 # from package1 import mywork # mywork.myjoin() # 引入包中模块下的成员 # from package1.mywork import mygetsize # mygetsize() # 3.单入口模式(分模块不能单独进行调用,统一由主文件main进行调用) """使用相对路径进行导入""" import package2.pkg1.pkg1_m2 as ppp2 # print(package2.pkg1.pkg1_m2.ceshi100) print(ppp2.ceshi100)
pakage1目录(init.py、mywork.py文件)
init.py文件
__all__ = ["ceshi3"]
print("初始化文件被执行 ... ")
ceshi1 = "ceshi1"
ceshi2 = "ceshi2"
ceshi3 = "ceshi3"
# 具体从package1这个包中引入mywork这个模块
from package1 import mywork
mywork.py文件
def myjoin():
print("这是myjoin方法")
def mygetsize():
print("这是mygetsize方法")
pakage2目录
pkg_module1.py文件
ceshi201 = "ceshi201" ceshi202 = "ceshi202"
pkg_module2.py文件
空
pkg1目录
pkg1_m1.py文件
ceshi103 = "ceshi103" ceshi104 = "ceshi104"
pkg1_m2.py文件
# ### 单入口模式 """ 相对路径 . 代表当前路径 .. 代表上一级路径 相对路径不能被解释器直接引入,路径找不到. 分模块中的文件不能直接执行,必须通过导入到主入口文件, 间接执行才能找到对应的路径 含有相对路径的分模块不能直接执行,得通过主入口文件间接执行. """ ceshi100 = "ceshi100" ceshi101 = "ceshi101" # 相对于当前路径找pkg1_m1模块 from . import pkg1_m1 print(pkg1_m1.ceshi103) # 相对于当前路径pkg1_m1模块中引入ceshi104成员 from .pkg1_m1 import ceshi104 print(ceshi104) # 找上一级中的一个模块 from .. import pkg_module1 print(pkg_module1.ceshi201) # 找上一级中的一个模块里的一个成员 from ..pkg_module1 import ceshi202 print(ceshi202) # 找上一级包中的具体某个模块 from ..pkg2 import pkg2_m2 print(pkg2_m2.ceshi300) # 找上一级包中的具体某个模块里的具体的某个成员 from ..pkg2.pkg2_m2 import ceshi301 print(ceshi301) """ # .是无限的 . 当前路径 .. 上一级路径 ... 上一级的上一级 .... 上一级的上一级的上一级 ..... (这里的点是无限的) from .......................................... import 模块 """
pkg2目录
pkg2_m1.py文件
空
pkg2_m2.py文件
ceshi300 = "ceshi300" ceshi301 = "ceshi301"
小提示:
__all__ 但凡两边有下划线的,都是系统内置的一些属性,或者系统内置的一些方法 __all__ = ["ceshi"] 引入*的时候才会触发 . .. 只有主入口文件引入,才能解析路径3. 知识点总结
import 导入模块或包
# 文件就是一个模块,文件夹就是一个包 # 文件夹里面可以有很多文件,就相当于包中有好多的模块. import 模块或者包(包是文件夹,模块是文件) 模块不会被重复导入,引入一次终生受益 ''' 调用的时候: 模块.变量 模块.函数 模块.类 ''' # import.引入并起别名 , as 后面写这个模块的别名 别名.变量 别名.函数 别名.类 # import导模块的时候,会从sys.path提供的路径下去找,找不到就报错 # import sys # print(sys.path)
from … import … 从哪里导入什么什么东西
'''
调用的时候:
直接使用这个变量
直接使用这个函数
直接使用这个类
'''
# 可以导入所有,单个,多个
from module4 import *
...
from module4 import girl
print(girl)
from module4 import girl as g,boy as b #多个
print(b)
#返回模块名字的魔术属性 __name__
如果当前文件是直接运行的,返回"__main__"字符串
如果当前文件是间接导入的,返回当前文件名(模块名)
直接引入包中的成员
# 如果想把包当成模块用,在创建一个__init__.py中进行定义 # 当引入一个包的时候,当前包下的__init__文件自动执行.
import导入某个包下某个模块
# import package1.module1
import 导入某个包下某个模块 用as起别名
# import package1.module1 as pm # print(pm.girl)
from … import … 从哪个包下的哪个模块 具体的导入什么东西
# from package1.module2 import * #所有 # print(boy1) # from package1.module2 import boy1 #单个 # print(boy1) # from package1.module2 import boy1,lng21,Bf1 #多个 # lng21()
单入口模式 : 只通过主文件来调用分模块内容,分模块不单独执行
分模块不能单独进行调用,统一由主文件main进行调用 模块之间的互相嵌套导入,使用相对路径实现 单入口文件必须和包在同一层级,包里面可以含有各种包和模块
# from . import pkg 相对于当前路径引入模块 # from .pko2 import ceshi204 相对于当前模块引入具体属性 # from .. import pkg2_module1 相对于上一级引入模块 # from ..pkg2_two import pkt1 相对于上一级的某个包引入模块 # from ..pkg2_two.pkt2 import ceshi209 相对于上一级某个包下的某个模块引入某属性
. 当前路径 .. 上一级路径 ... 上一级的上一级 .... 上一级的上一级的上一级 ..... (这里的点是无限的) from .......................................... import 模块4. 购物车购买商品 5. 购物车结算商品



