「Python」2020.05.16学习笔记 | 第七章异常和模块 几种引入包的方式2+包总结

  • 学习测试开发的Day135,真棒!
  • 学习时间为1H
  • 第11天全天课下午视频3H30M-4H16M(END)

包的创建-4

image.png
image.png
from . import a
image.png
from . import cc
image.png
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:如何通过相对路径,找到绝对路径

image.png
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>

包的相对路径引用

image.png

包的总结

第一次导入一个模块,会执行这个模块

➢ 可以通过修改模块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文
件。

image.png

你可能感兴趣的:(「Python」2020.05.16学习笔记 | 第七章异常和模块 几种引入包的方式2+包总结)