欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python菜鸟编程第八课之模块包

程序员文章站 2022-07-09 23:37:39
...

Python菜鸟编程第八课之模块包

1.导入包

包:包是通过使用’.模块名’来组织Python模块名称空间的方式。具体而言,包就是一个包含’_init_.py’文件的文件夹。

目的:用文件夹将文件/模块组织起来。创建包的目的不是为了运行,而是为了被导入使用。包的本质依然还是模块。

tips:Python3中,即使包中没有_init_.py,也可以使用;Python2中,包中没有_init_.py,肯定报错;

使用时,import导入,导入带点的,点的最左边一点是包名。import导入文件时,产生名称空间的名字源于文件,import包,名称空间同样源于文件(包),_init_.py,导入包的本质就是导入它。

demo:

  • 新建一个test文件夹
  • 在test文件夹中新建三个文件夹,分别起名为:api、cmd、db
  • 在test文件夹中新建一个.py文件,命名为:_init_.py
  • 在api、cmd、db这三个文件夹中各新建一个_init_.py文件
  • 在api中新建两个.py文件命名为:student.py和version.py
  • 在cmd中新建一个.py文件命名为:manage.py
  • 在cmd中新建一个.py文件命名为:moudle.py

student.py中输入:

#student.py
def get():
    print('from student.py')

version.py中输入:

#version.py
def craet_resource(conf):
    print('from version.py',conf)

moudle.py中输入:

#moudle.py
def register_models(engine):
    print('from models.py',engine)

manage.py中输入:

#manage.py
def main():
    print('from manage.py')

在test文件夹下的_init_.py文件下输入:

from . import cmd
from . import db

在api文件夹下的_init_.py文件夹下输入:

from . import student
from . import version

在cmd文件夹下的_init_.py文件夹下输入:

from . import manage

在db文件夹下的_init_.py文件夹下输入:

from . import moudle

#开始测试

demo1:

在test.py文件下输入:

import test.db.moudle
test.db.moudle.register_models('Mysql')
from test.cmd import manage
manage.main()
from test.cmd.manage import main
main()
运行结果:
from models.py Mysql
from manage.py
from manage.py

demo2:

在test.py文件下输入:

import test
test.api.student.get()
test.api.version.craet_resource('school')

test.cmd.manage.main()

test.db.moudle. register_models('test')
运行结果:
from student.py
from version.py school
from manage.py
from models.py test

导入包,其实导入的是包里的_init_.py文件。

demo3:

清空api文件夹下面的_init_.py,然后输入:

a=6688
def func():
    print('api-->__init__.py')

__all__=['student','version','a']

在test.py文件中输入:

from test.api import *
student.get()
version.craet_resource('school')
print(a)
运行结果:
from student.py
from version.py school
6688

demo4:

在version.py中输入:

from ..cmd import manage#相对导入
manage.main()

在test.py文件中输入:

只能在顶层去调用,而不能在子模块中运行。

from test.api import version#绝对导入
version.manage.main()
运行结果:
from manage.py
from manage.py

博主QQ:1031748759,欢迎批评指正!