一、模块的概念

  在计算机的开发过程中,随着程序代码越写越多,在一个文件里代码就越来越长,越来越不容易维护。

  为了编写可维护的代码,我们把很多函数分组,放在不同的文件里面,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在PYthon中,一个 .py 文件就称之为一个模块(Module)。

 

二、使用模块的好处

  最大的好处是大大提高了代码的可维护性。

  其次,编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也经常引用其他模块,包括Python内置的模块和来自第三方的模块

  另外,使用模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,因此,在编写模块时,不必考虑名字会和其他模块冲突。但也要注意,尽量不要与内置函数名字冲突

三、模块的种类

  * Python 标准库

  *第三方模块

  *应用程序自定义模块

四、模块的导入方式

示例文件:

文件 cal.py

#!/usr/bin/env python
# -*- coding:utf8 -*-
def add(x,y):
return x+y def sub(x,y):
return x-y

  1. import 语句

    # 原理:

      ① 将i mport 的文件的执行一遍

      ② 将变量名引入 

    # 输出 import 查找变量的默认路径:

import sys
print(sys.path)

    #  注意:若要在当前目录下存在和要引入模块同名的文件,就会把要引入的模块屏蔽掉

import cal

print(cal.add(3,5))

  2.from .... import 语句

    # 这个声明不会把整个 cal 模块导入到当前的命名空间中,只会将它里面的 add 或 sub 单个引入到执行这个声明的模块的全局符号表

from cal import add
from cal import sub
print(add(3,5))
print(sub(5,6))

  3.form...import *

    # 这个提供了一个简单的方法导入一个模块中的所有项目。然而这中声明不应该被过多的使用。

    *** 大多数情况下,Python程序员不使用这种方法,因为引入其他来源的命名,很可能覆盖了已有的定义 ***

from cal import *

print(add(3,5))
print(sub(5,6))

五、包(package)

  为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称之为包(package)

  举个例子,一个 xyz.py 的文件就是一个名字叫 xyz 的模块,一个 abc.py 的文件就是一个名字叫 abc 的模块,

  假设我们的这两个模块名字和其他模块冲突了,于是我们可以通过包来组织模块,避免冲突。方法是选择一个顶层包名:

  引入包以后,只要顶层的包名不与别人冲突,那所有模块都不会与别人冲突。现在,wsgi,py模块的名字就变成了hi_django.wsgi,类似的,app_web文件夹里面的migrations.文件夹里面的若存在abc.py,那它的模块名就是app_web.migrations.abc

  请注意:每个包目录下面都会有一个__init__.py文件,这个文件是必须存在的。否则,Python就把这个目录当成普通目录(文件夹),而不是一个包。__init__.py可以是空文件,也可以有PYthon代码,因为__init__.py本身就是一个模块,而它的模块名就是对应包的名字

  调用包及时执行包下面的__init__.py文件

六、__name__ 语句

  * 在执行的 ,py文件中,print(__name__)打印出来的是 __main__

  * 在主函数中调用了含有 print(__name__) 命令的模块,而主函数中也有 print(__name__) 命令。

    执行主函数时,输出的是 模块所在的文件名 和__mian__

示例:

运行 cal.py 文件:

运行 bin.py 文件:

*** 使用方法及作用 ***

  if __name__ == '__mian__':   #建议所有自己写的.py文件里面都加上这个语句

   # 可以用于调试 在编写模块时所写的的定义函数 (即用于被调用文件的测试)

   ——因为如果不是直接执行该模块,调试定义函数的命令就不会执行,可以放心的在别的函数里面调用该模块而不用担心它会出现一些运行结果混淆

      # 表示 —不想该文件的里面的一些内容被其他文件调用

   ——如果别人直接将你的文件直接很顺利地调用过去,造成不是他的错误就是我的错误

     示例:我写好的文件给别人去维护,如果别人不知道我的这个文件是启动程序,他就直接用到这个文件,他调用这个文件。如果他调用的话,是相对于把我所写的所有逻辑给运行了一遍,而他只是想用我写在该文件里面的一个函数。这就会产生bug

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之 模块与包

    一. 模块 1.模块定义: 将代码量较大的程序分割成多个有组织的.彼此独立但又能互相交互的代码片段,这些自我包含的有组织的代码段就是模块. 2.模块分类: a.标准库(又称内置模块) b.开源模块(又 ...

  6. day21 python之模块和包

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

  7. python之模块与包

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

  8. Python之模块和包

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

  9. 《Python》模块和包

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

随机推荐

  1. Jmeter常见问题汇总(不断更新ing)

    1.测试计划中有多个线程组执行时,为了防止线程组间的相互干扰,需要如下设置一下:     2,接口测试中的上传字段为汉字时需要进行什么形式的转码? 方法一:需要把编码复选框勾选,才能正常通过接口查询数 ...

  2. D. Mahmoud and a Dictionary 种类并查集

    http://codeforces.com/contest/766/problem/D 所谓种类并查集,题型一般如下:给定一些基本信息给你,然后又给出一些信息,要求你判断是真是假.例如给出a和b支持不 ...

  3. 关于min-height:100%的解决办法

    前几天碰到一个问题,在用bs和jq2.2.0开发时,min-height设为100%在firefox和ie下没有起作用,先用css改了一下,但是min-height虽然是奏效了,但同时出现了其他css ...

  4. c#中stringbuilder的方法总结

    String 对象是不可改变的.每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间.在需要对字符串执行重复修改的情况下,与创建新 ...

  5. java_dom4j解析xml

    package forRQ; import java.io.File;import java.net.MalformedURLException;import java.util.Iterator;i ...

  6. 前端缓存-IndexedDB

    IndexedDB 就是浏览器提供的本地数据库,它可以被网页脚本创建和操作.IndexedDB 允许储存大量数据,提供查找接口,还能建立索引.这些都是 LocalStorage 所不具备的.就数据库类 ...

  7. idea 部署struts所遇到的问题\

    1.org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter 加载失败 解决方法:下载struts2 的源码包,然后将D:\ ...

  8. InChatter系统之服务器开发(一)

    服务器端是整个消息系统的中枢,类似与人类的大脑.没有他,根本无法实现客户端之间的交流,为什么呢?这也涉及到我们的系统涉及,在服务器端,每个客户端的标识数据都会在服务器端进行保存,在这种情况下,当某一个 ...

  9. 浅谈Key-value 存储——SILT

    摘要:本文以文章SILT: A Memory Efficient High Performance Key-Value Store 为基础,探讨SILT存储系统是如何实现内存占用低和高性能的设计目标, ...

  10. JPA调用存储过程

    @Transactional public BasAccount findByAccount(String account) { System.out.println(account); Query ...