zoukankan      html  css  js  c++  java
  • 2018.10.12python学习第十八天

    什么是包?(what)

    Packages are a way of structuring Python’s module namespace by using “dotted module names”
    译:包是通过一种使用‘.模块名’来组织python模块的namespace的方式

    通俗讲:就是包含有__init__.py文件的文件夹

    需要强调的是:
    1.在python3中,即使包下面没有__init__.py文件,import包仍然不会报错,而在python2中,包下一定要有该文件,否则import 包 报错
    2.创建包的目的不是为了运行,而是被导入使用,包只是模块的一种形式而已,包的本质就是模块

    为何要用包?(why) 包的本质就是一个文件夹,那么文件夹的功能就是讲文件打包起来 随着功能越写越多,我们无法将所有的功能都放到一个文件中,于是我们使用模块取组织功能,而随着模块越来越多,我们就需要用我呢见家将模块组织起来,依次来提高程序的结构性和可维护性

    注意事项:

    1.关于包相关的导入语句也分为import和from xxx  import xxx 两种,但是无论哪种,无论在什么位置,在导入时都必须遵循一个原则:
    a.凡是在导入时带点的,点的左边都必须是一个包,否则非法(报错)。可以带有一连串的点,如item.subitem.subsubitem,但是都必须遵从这个原则。但是对于导入后,在使用时就没有这种限制了,点的左边可以时包,模块,函数,类(他们都可以用点的方式调用自己的属性)

    b.import导入文件时,产生的namespace来源于文件, import 包,产生的namespace同样来源于文件,即包下的__init__.py文件,导入包的本质就是在导入该文件

    3.包A和包B下有同名模块也不会冲突,如A.a和B.b来自两个命名空间

    包的使用:

    1.import packagename
    单独导入包名称时,不会导入包中国所有包含的所有子模块,
    2.from xxx  import xxxx
    注意:from后import导入的模块,必须是一个明确的不能带点,否则有语法错误。
    如:from a import b,c是错误的语法
    3.from a.b import*
    此处有两种可能,如果b是一个子包的话,那么*是表示b包中,__init__.py文件中所有的name
    如果b是一个模块的话,那么*就是该模块下所有的name
    注意from a import b的用法
    如果a是一个模块,那么b不能是模块,要不然就会非法
    如果a是一个包,那么b必须是一个明确的不能带点的(参考上面第2点)
    绝对导入:
    从sys.path开始找文件的完整路径称之为绝地导入(from a.b import fun1 #就是从a文件夹中,找b文件夹,然后再b文件夹中找到fun1这个模块导入到目前的文件中(即输入这行字的文件)
    相对导入:
    from . .fun1 import *(一个点表示同层级,两个点表示上一层级,# 就是从上一层级的fun1模块中,导入该模块的全部name) 在内部文件中导入外部的模块功能
    top-lvevl package:
    包/子包所包含的模块都是用来被导入的,而不是被执行的。所环境变量都是以执行文件为准,,所以当我们在用相对导入导入外部模块功能的时候,我们的外部模块的层级不能超过执行文件的层级。

    绝对导入和相对导入的总结

    绝对导入:
    以执行文件的sys.path为起点开始导入,称之为绝对导入
    优点:执行文件与被导入的模块中都可以使用
    缺点:所有的导入都是以sys.path为起点,导入麻烦
    相对导入:
    参照当前所在文件的文件夹为起始开始查找,称之为相对导入
    符号:.代表当前所在文件的文件夹,..代表上一级文件夹,...代表上一级的上一级文件夹
    优点:导入更加方便
    缺点:只能在导入包中的模块时才能使用
    注意:
    1.相对导入只能用于包内部模块之间的相互导入,导入者与被导入者都必须存在于一个包内
    2.attempted relative import byound top-level package
    3.不应该超出顶级包

     

  • 相关阅读:
    界面布美观布局
    登陆界面验证码设置
    很好的JAVESRIPT控件
    c#导入EXCEL数据
    微软:系列课程 >Silverlight for Windows Phone 开发系列课程
    JavaScript动态网页制作宝库
    Silverlight经典教程书籍汇总
    SQL删除表中有重复的记录
    Javascript鼠标事件
    Android系统架构(转)
  • 原文地址:https://www.cnblogs.com/hello-yuanjing/p/9781807.html
Copyright © 2011-2022 走看看