Python进阶---Python工程的组织结构;包、模块、类

1.Python包与模块的名字:

包:文件夹(Python)    模块:文件夹里的文件即.py文件(Python.test1.py)

模块的命名:包名.模块名.py(Python.test1.py)

2.导包:

# 导包方式一:

import t.demo1 as m

print(m.a)

#导包方式二---导入一个变量

from t.demo1 import a

print(a)

#导包方式二-----导入多个变量用*这个符号

from t.demo1 import *

print(a)

print(d)

print(c)

#导包方式二----导入模块

from t import demo1

print(demo1.a)

from t.demo1 import a,b,\

c

print(a)

print(b)

print(c)

3.__init__.py文件的作用:

# 作用1:

# 在文件夹里加__init__.py文件时,Python会自动认为这是一个包,若不加会被认为是普通文件夹

# _init_.py的用法-------->>>>>>不用在控制台终端单独执行,在Python里面呢这个会被自动执行,就像这个直接import t 就可以执行t文件下的__init__

# 文件,终端会输出:This is a __init__.py file

# import t

# 反过来说,假如我导的不是import t而是导入的是一个模块即当前的demo1.py-------运行结果告诉我们__init__文件里的内容仍然会被自动执行从而了解

# Python中的__init__文件的功能

# 作用2:

# __init__.py文件还可以控制文件下面模块的使用,即当前__init__.py文件的内容

# a = 'This is a _init_.python file'
# print(a)

__all__ = ['demo1','demo3']

上面的代码告诉我们__init__.py文件定义了一个 变量,允许 demo1和demo3里面的变量都可以使用,在demo2运行:

Python进阶---Python工程的组织结构;包、模块、类_第1张图片

备注:

# 模块的内置变量和内置属性

# __all__ = ['a','c','d']

# a=22
# c=99
# d=99

__all__ = ['a', 'b', 'c']
a = 'a'
b = 'b'
c = 'c'

 

e = 33

f = 66

g = 99

 

            demo1的代码               demo3的代码

 

 

 

 

 

 

 

 

运行代码:

from t import *
print(demo1.a)
print(demo3.e)

运行结果:

 如果将__init__文件里的定义的变量去掉demo3,其他不变,则运行结果为:

Python进阶---Python工程的组织结构;包、模块、类_第2张图片

# 作用3:

可以批量导入----就是说如果你的每一个模块都需要Python标准的内库内容,不可能你每在一个模块写代码都重要写入所需的内库内容那么__init__.py文件则会帮助你解决这个问题

__init__.py文件的代码为:

#导入的是Python里面系统内置的标准内库
import sys
import datetime
import io

我的模块这里就重新加入demo4即代码如下:(在任意的模块都用下面这段代码都会执行标准内库的内置函数)

import t

print(t.sys.path)

得到的运行结果:

4.包与模块的几个常见错误:

①、包和模块是不会重复导入的

②、避免循环导入:

在重新创立一个文件夹:这里拿博主我的来讲(我创建的是p文件)

Python进阶---Python工程的组织结构;包、模块、类_第3张图片

p1.py文件的代码是:

from p2 import p2

p1 = 1
print(p2)

p2.py文件的代码是:

from p1 import p1

p2 = 2

下面则我们来运行一下p1.py的代码结果:

Python进阶---Python工程的组织结构;包、模块、类_第4张图片

很明显上述结果出错了:原因就是:在你运行p1.py文件的时候要导入p2模块的p2变量,那么首先它将去p2模块导入,不巧的是p2模块的第一行代码是要导入p1模块的p1变量,如此循环,则造成循环导入的问题,编译则不会通过

如果将p2.py的代码: from p1 import p1删除,让我们再来看删除之后的运行结果:

Python进阶---Python工程的组织结构;包、模块、类_第5张图片

哈哈哈,结果正如我们所猜到的一样!!!

注意:下面则也是一个导入循环的一个错误案例

如果在p文件下导入p3.py和p4.py两个模块:(p1.py代码不变,剩下的如下改变)

p2模块的代码是:

from p3 import p3

p2 = 2

p3模块的代码是:

from p4 import p4

p3 = 3

p4模块的代码是:

from p1 import p1

p4 = 4

下面我们则运行p1.py的程序:

Python进阶---Python工程的组织结构;包、模块、类_第6张图片

报错了!!!

参考第一个导入循环案例,我想大家应该知道错误的原因以及修改的办法了吧:

解决方案:将p4.py的代码第一行删除:

运行结果如下:

Python进阶---Python工程的组织结构;包、模块、类_第7张图片

 程序成功运行了!!!

案例3:

p1.py文件的代码是:

import p2

p2.py文件的代码是:

p2 = 2

print(p2)

则还是运行p1.py文件的程序:

运行结果:

Python进阶---Python工程的组织结构;包、模块、类_第8张图片

到这里我想大家是不是疑惑重重,为什么会出现这样的结果呢???

原因:在Python里面一旦在一个模块里导入另外的一个模块,那么它将会执行导入模块里的所有代码(不信???那我们实践说话)

将p2.py文件的代码改为:

p2 = 2

print(p2)
print ('孟小鱼真帅啊')

运行p1.py的程序结果:

经过验证确实如此

你可能感兴趣的:(Python3进阶)