码迷,mamicode.com
首页 > 其他好文 > 详细

py知识(每日更新) 7.1

时间:2019-07-04 17:15:24      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:ini   操作   import   必须   缺点   错误   简单   name   init   

包的使用

第一类:

? 执行文件 通过import导入包以及包内的功能

? 创建一个aaa的包,自行创建一个__init__py文件

? 创建一个包会发生三件事儿:

? 1.将以XXX包内的__init__py文件加载到内存中

? 2.创建一个以XXX命名的名称空间.

? 3.通过XXX . 的当时引用__init__的所有的名字.

import aaa
# 如何在当前文件中,引用aaa包的bbb包?
    1.在执行文件写入 import aaa
    2. aaa的__init__ 里面写 from aaa import bbb
    3.在执行文件 aaa.bbb
print(aaa.bbb)

如何在当前文件中,引用aaa包的bbb包的MB文件中的函数FUNC.
    1.在执行文件写入 import aaa
    2. 在aaa包的`__init__` 写上 from aaa import bbb (这样bbb包的__init__ 里面的所有的名字都能够被引用)
print(aaa.bbb.name)
    3.在bbb包的`__init__` 协商from aaa.bbb import mb
aaa.bbb.mb.func3()

注意:
    最开始的模块或者包名一定是内存,内置,sys.path中能找到的
    直接import 是为了让我们会使用包里面的__init__ 

第二类:

from ... import ...

不用设置init文件

from aaa.bbb.m2 import func1
func1()
from aaa.bbb import m2
m2.func1()

from a.b.c import d.e.f
# c的. 的前面一定是包名
# import 的后面一定是名字,且不能再有点
错误示范:
    from aaa.bbb.m2.func1 omport a
    应为:
    from aaa.bbb import m2
    m2.func1()

相对导入和绝对导入

? 需求由来:无论对XX模块有任何操作,对于使用者来说不应该改变,极少的改变对其的调用

? 用.或者..的方式最为起始(只能在一个包中使用,不能用于不同目录内)

from ..cmd import manage
manage.main()

绝对导入与相对导入
# 绝对导入: 以执行文件的sys.path为起始点开始导入,称之为绝对导入
#        优点: 执行文件与被导入的模块中都可以使用
#        缺点: 所有导入都是以sys.path为起始点,导入麻烦

# 相对导入: 参照当前所在文件的文件夹为起始开始查找,称之为相对导入
#        符号: .代表当前所在文件的文件加,..代表上一级文件夹,...代表上一级的上一级文件夹
#        优点: 导入更加简单
#        缺点: 只能在导入包中的模块时才能使用
      #注意:
        1. 相对导入只能用于包内部模块之间的相互导入,导入者与被导入者都必须存在于一个包内
        2. attempted relative import beyond top-level package # 试图在顶级包之外使用相对导入是错误的,言外之意,必须在顶级包内使用相对导入,每增加一个.代表跳到上一级文件夹,而上一级不应该超出顶级包

py知识(每日更新) 7.1

标签:ini   操作   import   必须   缺点   错误   简单   name   init   

原文地址:https://www.cnblogs.com/lyoko1996/p/11133506.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!