模块

python语言的组织结构层次:

包->模块->代码文件->类->函数->代码块

什么是模块呢

可以把模块理解为一个代码文件的封装,这是比类更高一级的封装层次

一个写好的模块可以导入给其他python文件来用,在其他语言中,这种通常被称为库

比如C语言的库函数之类的

C语言中这样引用 #include <stdio.h>

python中则是 import XXX

模块在python中分为第三方模块,用户自定义模块,标准模块三部分

用户自定义模块很好理解,就是用户自己编写的模块

而第三方模块则是python比如pypi上的可以下载的包,比如django就是的

用户编写模块,可以编写一个文件,那么模块名就是这个文件名

要引用这个模块内的函数 就是 from 模块名 import 函数名

接下来,就可以直接用这个导入的模块内的函数了

或者,import 模块名

那么用这个模块内的函数需要这样用 模块名.函数名

模块的优点

  1. 可以更好的组织程序结构
  2. 提高了代码的可复用性,比如,我们引用python的标准模块,比如os模块,sys模块,就是利用现有的方法再去做自己的事情
  3. 使用模块也可以更好的管理命名空间,比如同名变量,同名函数只要分布在不同的python模块里,就没有关系,但是还是要注意不要和系统函数名,python关键字等发生冲突

包package

包是组织模块的工具

在python里,用目录的形式来组织模块,模块所在的目录成为包

包所在的目录有个特定,一定要有一个空的__init__,py文件,才会被识别为包

否则,在导入的时候会提示,没有这个模块等异常抛出

下面分别举例子说明导入包和导入模块的不同

导入模块

我们先看代码的目录组织结构

下面的文件都在这个目录下 /opt/MyExercises/PythonExercises

这个目录下有两个文件

showadd.py和test.py

showadd的逻辑很简单,接受两个参数,把这两个参数的和相加,并显示这个相加的结果

test.py则是调用showadd模块来做这个事

showadd.py

# coding:utf-8

def showadd(x, y):
c = x + y
print c
return c

test.py

# coding:utf-8

import showadd
showadd.showadd(2, 3)

然后运行 python test.py

会看到显示结果是 5,正是test.py文件里传入的两个参数的相加的结果

导入包

对应前面说的导入包,我们需要在相应的目录下创建一个空文件名为__init__.py

我们先看下,如果我们不创建这个文件,会导致什么错误发生呢?

我们还是一样,先看下文件的组织结构

![文件组织结构][3]

我们看到,现在用一个目录容纳了showadd.py这个文件

我们看看没有在这个目录创建一个空的__init__.py,会有什么错误

我们看到,抛出了一个导入错误

那么,我们再在这个目录下,创建一个空的__init__.py文件看看

程序demo.py 文件内容

# coding:utf-8

from packagefortest.showadd  import showadd

showadd(3, 4)

然后,我们再运行程序:

[root PythonExercises]# python demo.py
7

python的模块和包的更多相关文章

  1. Python之模块和包导入

    Python之模块和包导入 模块导入: 1.创建名称空间,用来存放模块XX.py中定义的名字 2.基于创建的名称空间来执行XX.py. 3.创建名字XX.py指向该名称空间,XX.名字的操作,都是以X ...

  2. 一文搞懂 Python 的模块和包,在实战中的最佳实践

    最近公司有个项目,我需要写个小爬虫,将爬取到的数据进行统计分析.首先确定用 Python 写,其次不想用 Scrapy,因为要爬取的数据量和频率都不高,没必要上爬虫框架.于是,就自己搭了一个项目,通过 ...

  3. python 深入模块和包

    模块可以包含可执行语句以及函数的定义. 这些语句通常用于初始化模块. 它们只在 第一次 导入时执行.只在第一次导入的时候执行,第一次.妈蛋的第一次...后面再次导入就不执行了. [1](如果文件以脚本 ...

  4. (Python )模块、包

    本节开始学习模块的相关知识,主要包括模块的编译,模块的搜索路径.包等知识 1.模块 如果我们直接在解释器中编写python,当我们关掉解释器后,再进去.我们之前编写的代码都丢失了.因此,我们需要将我们 ...

  5. Python 基金会 —— 模块和包简介

    一.模块(Module) 1.模块的作用      在交互模式下输出的变量和函数定义,一旦终端重新启动后,这些定义就都不存在了,为了持久保存这些变量.函数等的定义,Python中引入了模块(Modul ...

  6. python基础-------模块与包(一)

    模块与包 Python中的py文件我们拿来调用的为之模块:主要有内置模块(Python解释器自带),第三方模块(别的开发者开发的),自定义模块. 目前我们学习的是内置模块与第三方模块. 通过impor ...

  7. python中模块,包,库的概念

    模块:就是.py文件,里面定义了一些函数和变量,需要的时候就可以导入这些模块. 包:在模块之上的概念,为了方便管理而将文件进行打包.包目录下第一个文件便是 __init__.py,然后是一些模块文件和 ...

  8. python的模块与包的导入

    类似于C语言的包含头文件去引用其他文件的函数,python也有类似的机制,常用的引入方法有以下 import 模块名 #模块名就是py文件名 #使用这种方法以后调用函数的时候要使用模块名.函数名()这 ...

  9. day21 python之模块和包

    一 模块 1 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编 ...

  10. python之模块与包

    一模块 二包 一模块 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的代 ...

随机推荐

  1. 浏览器兼容CSS渐进增强 VS 优雅降级如何选择

    由于低级浏览器不支持 CSS3,但是 CSS3 特效太优秀不忍放弃,所以在高级浏览器中使用CSS3,而在低级浏览器只保证最基本的功能.二者的目的都是关注不同浏览器下的不同体验,但是它们侧重点不同,所以 ...

  2. Liunx2:Liunx目录结构

    Liunx目录图 进入根目录,使用ll命令看一下Liunx整个根目录图: 这里面所有的目录都是买完服务器之后最初始的目录,没有进过任何加工.Liunx以树的结构组织所有目录,用一张图表示一下Liunx ...

  3. 【Spring源码分析】非懒加载的单例Bean初始化过程(上篇)

    代码入口 上文[Spring源码分析]Bean加载流程概览,比较详细地分析了Spring上下文加载的代码入口,并且在AbstractApplicationContext的refresh方法中,点出了f ...

  4. 对于最近线上服务以及京东等大型互联网公司对java工程师要求的一些思考

    当下线上服务为了减少上线,经常搞成配置化,配置化对于版本以及持续集成本身是很大破坏,对于此,我个人持保留态度, 是反对过多东西进行配置化,其实配置化本身没有什么问题,关键是动态对配置进行修改而没有与代 ...

  5. LNMP详解

    目录 Nginx配置    1 PHP解析    1 Mysql操作    3 服务安装    3 连接测试    3 数据配置    3 Blogs建立    4   LNMP 环境 Mysql:1 ...

  6. getPropertyValue 获取CSS样式

    新学习一个js 的方法 getPropertyValue   (实现 js框架中  css 的最终调用的函数),取得元素最终计算出的css 样式 DEMO: <!DOCTYPE html> ...

  7. JavaSE语法基础(3)---函数、数组

    JavaSE语法基础(3)---函数.数组 函数的概念:实现特定功能的一段代码,可反复使用. 函数的出现减少代码冗余,提高代码的复用性,可读性,可维护性,可以使每个功能模块独立起来,方便分工合作. 函 ...

  8. (floyd)佛洛伊德算法

    Floyd–Warshall(简称Floyd算法)是一种著名的解决任意两点间的最短路径(All Paris Shortest Paths,APSP)的算法.从表面上粗看,Floyd算法是一个非常简单的 ...

  9. 【Python】 迭代器&生成器

    迭代器 任何一个类,只要其实现了__iter__方法,就算是一个可迭代对象.可迭代对象的__iter__方法返回的对象是迭代器,迭代器类需要实现next方法.一般来说,实现了__iter__方法的类肯 ...

  10. KMP(构建next数组)

    字符串匹配算法KMP, 核心思想是尽可能利用已经匹配的结果, 跳过尽可能多的不需要匹配的情况 重点和难点都在next数组的建立上 1. KMP算法的next数组求解 以模式串 a b a c a b ...