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运行:
备注:
|
|
demo1的代码 | demo3的代码 |
运行代码:
from t import *
print(demo1.a)
print(demo3.e)
运行结果:
如果将__init__文件里的定义的变量去掉demo3,其他不变,则运行结果为:
# 作用3:
可以批量导入----就是说如果你的每一个模块都需要Python标准的内库内容,不可能你每在一个模块写代码都重要写入所需的内库内容那么__init__.py文件则会帮助你解决这个问题
__init__.py文件的代码为:
#导入的是Python里面系统内置的标准内库
import sys
import datetime
import io
我的模块这里就重新加入demo4即代码如下:(在任意的模块都用下面这段代码都会执行标准内库的内置函数)
import t
print(t.sys.path)
得到的运行结果:
4.包与模块的几个常见错误:
①、包和模块是不会重复导入的
②、避免循环导入:
在重新创立一个文件夹:这里拿博主我的来讲(我创建的是p文件)
p1.py文件的代码是:
from p2 import p2
p1 = 1
print(p2)
p2.py文件的代码是:
from p1 import p1
p2 = 2
下面则我们来运行一下p1.py的代码结果:
很明显上述结果出错了:原因就是:在你运行p1.py文件的时候要导入p2模块的p2变量,那么首先它将去p2模块导入,不巧的是p2模块的第一行代码是要导入p1模块的p1变量,如此循环,则造成循环导入的问题,编译则不会通过
如果将p2.py的代码: from p1 import p1删除,让我们再来看删除之后的运行结果:
哈哈哈,结果正如我们所猜到的一样!!!
注意:下面则也是一个导入循环的一个错误案例
如果在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的程序:
报错了!!!
参考第一个导入循环案例,我想大家应该知道错误的原因以及修改的办法了吧:
解决方案:将p4.py的代码第一行删除:
运行结果如下:
程序成功运行了!!!
案例3:
p1.py文件的代码是:
import p2
p2.py文件的代码是:
p2 = 2
print(p2)
则还是运行p1.py文件的程序:
运行结果:
到这里我想大家是不是疑惑重重,为什么会出现这样的结果呢???
原因:在Python里面一旦在一个模块里导入另外的一个模块,那么它将会执行导入模块里的所有代码(不信???那我们实践说话)
将p2.py文件的代码改为:
p2 = 2
print(p2)
print ('孟小鱼真帅啊')
运行p1.py的程序结果:
经过验证确实如此