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编写的代码(. ...
随机推荐
- 【API】反转输入字符(Java)
请求输入字符, 输出反转. import java.util.Scanner; public class T01 { public static void main(String[] args) { ...
- jQuery笔记之Easing Plugin
jQuery easing 使用方法首先,项目中如果需要使用特殊的动画效果,则需要在引入jQuery之后引入jquery.easing.1.3.js<script type="text ...
- Median Value
Problem A: Median Value Time Limit: 1 Sec Memory Limit: 128 MB Submit: 874 Solved: 307 [Submit][Stat ...
- TCP模型,控制标志,握手,挥手,长连接*
1. TCP协议 Transmission Control Protocol,传输控制协议 面向连接的协议 需要三次握手建立连接 需要四次挥手断开连接 TCP报头最小长度:20字节 2.模型图 3.T ...
- uwp选取文件夹并读取其中的图片
uwp对文件的操作和wpf,winform等等有很大的不同,主要原因是uwp对权限的要求比较严格,不能想从前那样随心所欲的读取文件. 1.首先找到Package.appxmanifest这个文件,在功 ...
- Java数组的交集、并集
// 求两个数组的交集 public static int[] SameOfTwoArrays(int[] arr1, int[] arr2) { // 新建一个空数组,用于存储交集,空数组长度应该为 ...
- vim插件minibuf配置
1.去下载网站下载minibufexpl.vim文件放入到~/vim/plugins中,有的系统路径是~/.vim/plugins; 下载网址如下 https://www.vim.org/script ...
- 请大家帮我找一找bug —— 一个MySQL解析程序(JAVA实现)
周末两天我写了一个MySQLParser.写这个东西的目的是:公司的一个项目中需要对数据打版本号(每个表的每条记录要有一个版本号字段,这个字段需要由框架自动打上去,而不是由程序员来做). 所以,我写的 ...
- mysql执行语句汇总
插入select的数据 INSERT INTO `test1`( order_id, goods_id, goods_name, goods_sn, product_id, goods_number, ...
- iOS---UICollectionView详解和常用API翻译
UICollectionView 1.必须要设置布局参数 2.注册cell 用法类似于UITableView 类.自动实现重用,必须注册初始化. 使用UICollectionView必须实现UICol ...