- 学习测试开发的Day135,真棒!
- 学习时间为1H
- 第11天全天课下午视频3H30M-4H16M(END)
包的创建-4
from . import a
from . import cc
import gloryroad
import gloryroad.submodule
print(gloryroad.a.add(1,2))
print(gloryroad.submodule .cc.multiple(2,10))
执行:
PS D:\0grory\day11> python b.py
3
20
PS D:\0grory\day11>
引入方式二:
from gloryroad import *
from gloryroad.submodule import *
print(a.add(1,2))
print(cc.multiple(2,10))
执行:
PS D:\0grory\day11> python b.py
3
20
PS D:\0grory\day11>
包的创建-5:如何通过相对路径,找到绝对路径
import os
print(__file__)
print(os.path.abspath(__file__))
print(os.path.dirname(os.path.abspath(__file__)))
执行:
PS D:\0grory\day11> python .\p5.py
.\p5.py
D:\0grory\day11\p5.py
D:\0grory\day11
PS D:\0grory\day11>
练习,文件的路径设置:
gloryroad
__init__.py
test1
__init__.py
a.py
test2
_init__.py
p.py
test1下__init__.py 代码为:
a=100
test2下p.py代码
import os
print(__file__)
print(os.path.abspath(__file__))
print(os.path.dirname(os.path.abspath(__file__)))
print(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
'''
gloryroad
__init__.py
test1
__init__.py
dd.py
test2
_init__.py
b.py
'''
执行:
PS D:\0grory\day11\test\test2> python p.py
p.py
D:\0grory\day11\test\test2\p.py
D:\0grory\day11\test\test2
D:\0grory\day11\test
PS D:\0grory\day11\test\test2>
想获取test1 下dd.py 中a的值
import os
print(__file__)
print(os.path.abspath(__file__))
print(os.path.dirname(os.path.abspath(__file__)))
print(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
path=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
import sys
sys.path.append(path)
import test1.dd
print (test1.dd.a)
'''
gloryroad
__init__.py
test1
__init__.py
a.py
test2
_init__.py
b.py
'''
执行:
PS D:\0grory\day11\test\test2> python p.py
p.py
D:\0grory\day11\test\test2\p.py
D:\0grory\day11\test\test2
D:\0grory\day11\test
100
PS D:\0grory\day11\test\test2>
包的相对路径引用
包的总结
第一次导入一个模块,会执行这个模块
➢ 可以通过修改模块module的all列表,来改变from module import * 时的
效果
➢ 导入一个包,其实就是导入包的init.py模块
➢ 如果包的init.py模块为空,那么importpackage这样的语句是不能使用包当
中的任何模块的
➢ 如果包的init.py模块为空,那我们只能使用import package.module或者
from package import module这样的导入方式
➢ init.py也是个模块,其实也可以在init.py中直接定义函数fun,那样
import package就可以直接用package.fun这个函数了是吧。但是我们一般不
会这么干,这样会使init.py文件太乱
➢ init.py也是个模块,那也可以在这个模块中导入其他模块,这样import
package时,就能直接使用一些符号了。
➢ init.py也是个模块,也可以定义all列表变量,控制from package
import * 的作用
import xxxx总结
模块:一个python文件
import xxxx
pirnt(xxxx.变量名)
xxxx是文件的名字
包:一个目录包含__init__.py和一个或多个模块(python文件)
import xxxx.yyyy #xxxx是包的名字,yyyy是模块的名字
print(xxxx.yyyy.变量)
子包:包:xxxx 子包:yyyy 模块:zzzz
import xxxx.yyyy.zzzz
print(xxxx.yyyy.zzzz.变量)
from xxx import xxxx 总结
模块:一个python文件
xxxx是文件的名字
from xxxx import 变量名字(z)
print(z)
包:xxxx是包的名字,yyyy是模块的名字
from xxxx.yyyy import z#z是在yyyy模块中的变量名
print(z)
子包:包:xxxx 子包:yyyy 模块:zzzz
from xxxx.yyyy import m#m是在yyyy模块中的变量名
print(m)
重点
import xxxx #引入命名空间
不管在哪里写xxxx,程序都不能少xxxx
from xxxx import yyyy #省略命名空间
不管在那里写,都不用写xxxx
If name == ‘main’:
有时候我们会在一个.py文件代码的最下面看到if name=='main':。 在Python中,所有的模块都有一个内置属性name。这个属性的值,取决于
你如何应用该模块。如果import一个模块,那么模块name的值通常为模块
文件名,不带路径或者文件扩展名。
但是如果你把一个模块当成一个标准程序直接运行,在这种情况下,name
的值将是一个特别的缺省值“main”。所以在cmd中直接运行.py文件时,
name的值就等于'main'。
而在别的.py文件中当模块import一个.py文件后,name的值则等于模块文
件名。
由此我们可以使用if name==‘main’来判断是否是直接运行的.py文
件。