模块与包

一、模块

  1、模块是怎么诞生的。

     在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。为了编写可维护的代码,我们把很多函数分组,分别放到  不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在Python中,一个.py文件就称之为一个模块(Module)。

  2、模块的作用。

    提高了代码的可维护性。其次是编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也经常引用其他模块,包括Python内置的模块和来自第三方的模块。另外,使用模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,因此,我们自己在编写模块时,不必考虑名字会与其他模块冲突。但是也要注意,尽量不要与内置函数名字冲突。

  3、模块的分类

    1.系统内置模块,即python标准库

    2.第三方模块,即他人编写好了的模块,直接下载下来用就可以了(scary,requests等)

    3.应用程序自定义模块,即编程人员自己编写的模块。

  4、模块的导入方式。

    1.import 语句

      格式:import 模块名

        注释:模块导入时如果是内置模块会直接被导入,如果是第三方模块或者是自定义模块则会根据sys.path所给的路径进行查找。

           一个模块可以在当前位置import多次,但只有第一次导入会执行源文件内的代码,原因是:第一次导入就会将模块包含的内容统统加载到

内存了,以后在当前文件位置的导入都是指向内存中已有的模块

    2.from…import 语句

      格式:import  模块名  import 变量名

      注释:这个声明不会把整个modulename模块导入到当前的命名空间中,只会将它里面的变量名单个引入到执行这个声明的模块的全局符号表。

    3.补充.

      当import一个模块时,首先会立刻创建一个新的名称空间,用来存放该模块中定义的所有变量的名字;然后会在该名称空间内执行foo.py内所有的代码,

最后需要知道的是import关键字就是定义了一个名字,只不过此刻我们用import定义的是一个模块名字foo,该名字就是指向foo.py的名称空间,而foo.的方式

就是从该名称空间里找名字,可以使用foo.__dict__来查看这些名字。

     注释:import的两个过程:  创建新的名称空间  {名字:对象和}执行被调用的模块 (第二次不会被执行)。

二、包

  1、为什么会有包。

    如果不同的人编写的模块名相同怎么办?为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package),引入了包以后,只要顶层的包

名不与别人冲突,那所有模块都不会与别人冲突。

  2、什么是包?

    包的作用和文件夹的作用相同,只不过与文件夹的区别是新建一个包会自动产生一个__init__.py的文件,该文件可以写内容也可以不写内容。__init__.py的

模块名就死对应的包名,意思就死说当你直接调用这个包的时候实际上是调用包下面init里的东西。

  3、如何调用包内模块

    1.如果调用模块和被调用模块在同一个包内,俩模块是属于亲兄弟关系那么这俩模块可直接被调用。

    2.如果调用模块和被调用模块在同一个包内,俩模块是属于亲叔侄关系,那么需要以from 包名 import  模块名 来调用该模块

    3.如果调用模块和被调用模块在同一个包内,俩模块是属于表叔侄关系,那么久需要调用os模块吧被调用包的路径加到sys.path中去。

    eg:import os,sys  #调用模块
     BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#调用文件路径
     print(BASE_DIR)
     sys.path.insert(0,BASE_DIR)#添加到搜索路径

最新文章

  1. 中秋时候做了一个ppt画图插件
  2. 安装SQL提示重启电脑失败,解决办法
  3. CCEA OCX
  4. iTiTa再次回归,这一年我们都在干什么?
  5. HDU 5832 A water problem (带坑水题)
  6. pcommlite串口通讯库使用
  7. JVM年轻代、年老代、永久代
  8. Java进阶篇(六)——Swing程序设计(下)
  9. 团队作业4——第一次项目冲刺(Alpha版本)2017.11.19
  10. 数据结构之Trie树
  11. [微信小程序]在应用地图时,如何设置满屏(高度)
  12. Kickstart 和 Cobbler ks.cfg文件详解
  13. js中的setTimeout和setinterval 用法说明
  14. 去掉win7快捷方式小箭头
  15. JavaScript Array常用属性和方法
  16. python_10 迭代器和生成器
  17. Google+ 团队的 Android UI 测试
  18. HDU 2393 Higher Math (判断直角三角形)
  19. 多进程编程之用户ID和用户组ID
  20. vim 中替换命令

热门文章

  1. JDBC性能优化方案
  2. flask的分页功能
  3. .net 取当前代码的行号及类名称
  4. mysql设置主从同步
  5. Android使用ImageView显示网络图片
  6. iOS8的autolayout和size class
  7. Hadoop自带Sort例子分析
  8. Android Studio中查看类的继承关系
  9. Linux 安装中文man手册
  10. ubuntu 16.04查询文件安装目录