Python之模块和包的创建与使用
一、模块的概念
在计算机的开发过程中,随着程序代码越写越多,在一个文件里代码就越来越长,越来越不容易维护。
为了编写可维护的代码,我们把很多函数分组,放在不同的文件里面,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在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之模块和包的创建与使用的更多相关文章
- Python之模块和包导入
Python之模块和包导入 模块导入: 1.创建名称空间,用来存放模块XX.py中定义的名字 2.基于创建的名称空间来执行XX.py. 3.创建名字XX.py指向该名称空间,XX.名字的操作,都是以X ...
- 一文搞懂 Python 的模块和包,在实战中的最佳实践
最近公司有个项目,我需要写个小爬虫,将爬取到的数据进行统计分析.首先确定用 Python 写,其次不想用 Scrapy,因为要爬取的数据量和频率都不高,没必要上爬虫框架.于是,就自己搭了一个项目,通过 ...
- python 深入模块和包
模块可以包含可执行语句以及函数的定义. 这些语句通常用于初始化模块. 它们只在 第一次 导入时执行.只在第一次导入的时候执行,第一次.妈蛋的第一次...后面再次导入就不执行了. [1](如果文件以脚本 ...
- (Python )模块、包
本节开始学习模块的相关知识,主要包括模块的编译,模块的搜索路径.包等知识 1.模块 如果我们直接在解释器中编写python,当我们关掉解释器后,再进去.我们之前编写的代码都丢失了.因此,我们需要将我们 ...
- python之 模块与包
一. 模块 1.模块定义: 将代码量较大的程序分割成多个有组织的.彼此独立但又能互相交互的代码片段,这些自我包含的有组织的代码段就是模块. 2.模块分类: a.标准库(又称内置模块) b.开源模块(又 ...
- day21 python之模块和包
一 模块 1 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编 ...
- python之模块与包
一模块 二包 一模块 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的代 ...
- Python之模块和包
一.模块 1.什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编 ...
- 《Python》模块和包
一.模块 1.什么是模块: 一个模块就是一个包含了Python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1.使用Python编写的代码(. ...
随机推荐
- js判断是否为ie浏览器,精确显示各个ie版本
function IETester(userAgent){ var UA = userAgent || navigator.userAgent; if(/msie/i.test(UA ...
- [USACO 2011 Nov Gold] Cow Steeplechase【二分图】
传送门:http://www.usaco.org/index.php?page=viewproblem2&cpid=93 很容易发现,这是一个二分图的模型.竖直线是X集,水平线是Y集,若某条竖 ...
- B - Archer
Problem description SmallR is an archer. SmallR is taking a match of archer with Zanoes. They try to ...
- D. Mahmoud and a Dictionary 种类并查集
http://codeforces.com/contest/766/problem/D 所谓种类并查集,题型一般如下:给定一些基本信息给你,然后又给出一些信息,要求你判断是真是假.例如给出a和b支持不 ...
- JS 事件添加onclick写法注意。
自定义函数添加onclick事件写法注意. 错误写法:element.onclick = addclass(className); 正确写法:element.onclick = function(){ ...
- "言官误国"
"言官误国" 之前读<明朝那些事儿>的时候,了解到了一个全新的概念,确切的说与之前的印象完全不符合的概念:言官.之前我印象中的言官都是魏征那样的人,为国为民.冒死直谏等 ...
- 调用wsdl接口,参数是xml格式
1.最近太累了,好困.闲话少许直奔主题吧.上代码 try{ String wsurl = "http://172.16.16.236:9999/xxx/ws/WSService?wsdl&q ...
- 前端:常见的6种HTML5错误用法
一.不要使用section作为div的替代品 人们在标签使用中最常见到的错误之一就是随意将HTML5的<section>等价于<div>——具体地说,就是直接用作替代品(用于样 ...
- SceneAction$$FastClassByCGLIB$$7330f7b9.invoke(int, Object, Object[]) line: not available
现象:在调试状态下,断点可以进入ACTION ,当调用service的时候,发现无法进入service中的断点,就报了题目中的错误. 过程:1.降低JDK.因为本工程是用JDK1.6编译的,maven ...
- Visual Studio 2013 错误系统找不到指定文件,0x80070002
错误:Visual Studio 2013 按照成功后,可以创建空web项目,但不能建webform 和 mvc 项目. 提示系统找不到指定文件,0x80070002. 解决方式: Step1: Wi ...