python学习之模块-模块(一)
第五章
5.1 自定义模块
模块概念:
把一些常用的函数放在一个py文件中,这个文件就称之为模块。
模块的意义:
1.方便管理。让程序的解构更加清晰,实现功能的重复使用;
2.提升开发效率。俗话说的拿来主义,避免重复造轮子,使用别人写好的实现了某些功能的模块,可以大大提高开发效率。
模块的分类:
第一类:内置模块,也叫做标准库。python自带,200多个,每个模块又包含很多的功能,比如os,sys,time;
第二类:第三方模块,第三方库。需通过pip install指令安装的模块,比如Django,BeautfulSoup等,大约6000多种;
第三类:自定义模块。我们自己在项目中定义的模块。
5.1.1 import
1.使用
语法:import 模块名
模块可以包含可执行语句和函数的定义,这些语句的目的是初始化模块,他们只在模块名第一次遇到import导入语句时才执行。import的优化手段是可以在程序的任何位置使用,并且在第一次加载完成时执行模块里的执行语句,后边再调用时就不会重复执行模块里的语句。
2.第一次导入模块执行的三件事
- 在内存中创建一个以模块名命名的名称空间
- 执行这个名称空间里的代码
- 通过 模块名. 的方式引用该模块里面的内容
ps:重复导入会直接引用内u你中已经加载好的结果
3.被导入模块有独立的名称空间
每个模块都是一个独立的名称空间,定义在这个模块中的函数,把在这个模块的名称当作全局名称空间,这样在编写自定义的模块时,就不用担心自定义模块中的全局变量被导入后与使用者的全局变量冲突。
举例(小坑):
#自定义模块aries.py,当作脚本运行时,会看到的调用change函数后name已经被改变了
name = 'aries'
def change():
global name
name = 'allen'
change()
print(name) #输出 allen
#把aries.py当作模块在新的py文件中加载时
import aries #加载aries模块
name = 'Jack' #在本py文件下,创建全局变量name与aries模块里的name同名
aries.change() #调用aries下的change函数
print(name)
#### 输出
allen #第一次加载aries时,执行模块里的语句
Jack #chang函数并没有改变本地py文件中name的值
4.为模块起别名
语法:import 模块名 as 别名
优点:将很长的模块名简化,方便使用;有利于代码的扩展和优化
#mysql.py
def sqlparse():
print('from mysql sqlparse')
#oracle.py
def sqlparse():
print('from oracle sqlparse')
#test.py
db_type=input('>>: ')
if db_type == 'mysql':
import mysql as db
elif db_type == 'oracle':
import oracle as db
db.sqlparse()
5.导入多个模块
# 可以但是不推荐
import os,sys,json
#推荐写法
# 易于阅读 易于编辑 易于搜索 易于维护
import os
import sys
import json
5.1.2 from...import...
1.from...import...使用
语法:form 模块名 import 函数名1,函数名2...
也可以使用as起别名
2.from...import...与import的区别
使用from...import...则是将模块中的名字直接导入到当前的名称空间中,所以在当前名称空间中,直接使用名字就可以了、无需加前缀
from...import...的方式有好处也有坏处
好处:使用起来方便了
坏处:容易与当前执行文件中的名字冲突。
3. from ... import *
把模块里的所有的函数加载到本py文件中,不建议使用。
在模块中可以使用__all__来控制哪些函数可以被调用
#在aries模块中,使用all可以把能被调用的函数写进去
__all__=['change','a_count']
5.1.3 py文件的两种功能
编写好的一个py文件有两种用途:
- 脚本,一个文件就是整个程序,用来被执行
- 模块,文件中存放着一堆功能,用来被导入使用
python内置了全局变量__name__:
- 当文件被当做脚本执行时:name 等于
__main__ - 当文件被当做模块导入时:__name__等于模块名
可以在在模块中使用一下条件来限制条用函数
if __name__ == '__main__':
# 在模块文件中测试chang函数
# 此模块被导入时 __name__ == aries 所以不执行
change()
5.1.4 模块的搜索路径
查找顺序:
内存中已经加载的模块->内置模块->sys.path路径中包含的模块
【特别注意:】我们自定义的模块名不应该与系统内置模块重名
导入sys.path:
#首先制作归档文件:zip module.zip foo.py bar.py
import sys
sys.path.append('module.zip')
import foo,bar
#也可以使用zip中目录结构的具体位置
sys.path.append('module.zip/lib/python')
#windows下的路径不加r开头,会语法错误
sys.path.insert(0,r'C:\Users\Administrator\PycharmProjects\a')
python学习之模块-模块(一)的更多相关文章
- Python学习 Part4:模块
Python学习 Part4:模块 1. 模块是将定义保存在一个文件中的方法,然后在脚本中或解释器的交互实例中使用.模块中的定义可以被导入到其他模块或者main模块. 模块就是一个包含Python定义 ...
- python学习之argparse模块
python学习之argparse模块 一.简介: argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块.argparse模块的作用是用于解析命令行 ...
- Python学习day19-常用模块之re模块
figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...
- Python学习day18-常用模块之NumPy
figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...
- python学习之random模块
Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...
- Python学习笔记011_模块_标准库_第三方库的安装
容器 -> 数据的封装 函数 -> 语句的封装 类 -> 方法和属性的封装 模块 -> 模块就是程序 , 保存每个.py文件 # 创建了一个hello.py的文件,它的内容如下 ...
- Python学习笔记之模块与包
一.模块 1.模块的概念 模块这一概念很大程度上是为了解决代码的可重用性而出现的,其实这一概念并没有多复杂,简单来说不过是一个后缀为 .py 的 Python 文件而已 例如,我在某个工作中经常需要打 ...
- Python学习笔记-常用模块
1.python模块 如果你退出 Python 解释器并重新进入,你做的任何定义(变量和方法)都会丢失.因此,如果你想要编写一些更大的程序,为准备解释器输入使用一个文本编辑器会更好,并以那个文件替代作 ...
- Python学习笔记1—模块
模块的使用 引用模块的两种形式 形式一: import module_name 形式二: from module1 import module11 (module11是module的子模块) 例: ...
- Python学习笔记2——模块的发布
1.为模块nester创建文件夹nester,其中包含:nester.py(模块文件): """这是"nester.py"模块,提供了一个名为prin ...
随机推荐
- Tableau Sheet中的操作
如果想要给数据排名,例如给饼图中的数据排名 1 创建一个Rank 描述为INDEX()的测度 2.将RANK用Label形式显示并且编辑计算方法选择特定的属性. 属性本身也有可以快速计算的一些方式. ...
- mysql怎么查看数据库中表的大小
查看mysql数据库大小的四种办法,分别有以下四种:第一种:进去指定schema 数据库(存放了其他的数据库的信息)use information_schema第二种:查询所有数据的大小select ...
- Druid连接池错误(数据库版本问题)
前提 jdbc驱动: mysql-connector-java.8.0.13.jar durid依赖包:durid-1.0.9.jar mysql版本: mysql 8.0 1 错误 1.1 错误一 ...
- JavaScript基础——JavaScript函数(笔记)
avaScript 函数(笔记) JavaScript 是函数式编程语言,在JavaScript脚本中可以随处看到函数,函数构成了JavaScript源代码的主体. 一.定义函数 定义函数的方法有两种 ...
- 对于Arraylist 的一些疑问
是否保证线程安全? ArrayList 和 LinkedList 都是不同步的,也就是不保证线程安全. 底层数据结构区别? Arraylist 底层使用的是Object数组:LinkedList 底层 ...
- 40.数组中只出现一次的数字(python)
题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 思路 将数组的因为就两个数只出现一次,所以,这些数字做异或之后,得到的结果是这两个数做异或的 ...
- MySQL8.0.18通用版本安装
环境说明: 系统版本:CentOS release 6.8 (Final) MySQL版本:mysql-8.0.18 内存:63G 空间:8T 1 配置本地yum仓库 这个只需要拷贝一个镜像,然后挂载 ...
- LOJ #6145. 「2017 山东三轮集训 Day7」Easy 点分树+线段树
这个就比较简单了~ Code: #include <cstdio> #include <algorithm> #define N 100004 #define inf 1000 ...
- BZOJ 1095: [ZJOI2007]Hide 捉迷藏 动态点分治+堆
写了7k多,可以说是一己之力切掉了这道毒瘤题~ 开 $3$ 种堆,分别维护每个子树最大深度,以及每个节点在点分树中对父亲的贡献,和全局的最优解. 由于需要支持堆的删除,所以写起来特别恶心+麻烦. 细节 ...
- R_Studio(学生成绩)对数据进行属性构造处理
对“Gary.csv”中数据进行进行属性构造处理,增加“总成绩”属性 Gary.csv setwd('D:\\data') list.files() #数据读取 dat=read.csv(file=& ...