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 ...
随机推荐
- CentOS系统下使用docker安装pinpoint
准备:安装docker与docker-compose docker安装参考:https://www.cnblogs.com/zhi-leaf/p/10561501.html docker-compos ...
- 更优雅地关闭资源 - try-with-resource
https://www.cnblogs.com/hihtml5/p/6505317.html
- ab测试nginx Nginx性能优化
转自:https://www.cnblogs.com/nulige/p/9369700.html 1.性能优化概述 在做性能优化前, 我们需要对如下进行考虑 1.当前系统结构瓶颈 观察指标 压力测试 ...
- k8sDaemonSet控制器
DaemonSet用于再集群中的全部节点上同时运行一份指定的pod资源副本,后续新加入的工作节点也会自动创建一个相关的pod对象,当从集群中移除节点时,此类pod对象也将被自动回收而无须重建.也可以使 ...
- Linux知识点(二)
1 df 查看磁盘空间使用情况 df: disk free 空余硬盘 1.基本语法 df 项 (功描能述:列出文件系统的整体磁盘使用量,检查文件系统的磁盘空间占用情况)选 2.选项说明 选项 功能 ...
- radio(单选框)/checkbox(复选框) 美化
由于某种原因,可能需要对单选框(radio)或复选框(checkbox)进行美化,那么直接修改样式是行不通,要实现就需要添加js,以下js依赖于jquery radio.js: function ra ...
- Docker安装Mysql和Nginx
1. 序言 将应用容器化更方便于管理,昨天辛辛苦苦安装在宿主机上的,今天狠心重置服务器,学下docker练练手. 2. Get start 2.1 安装Docker 公司的云用的是ubuntu,我自己 ...
- Java类路径的问题
下面是eclipse中的文件组织形式. 下面是硬盘中文件的组织形式: src:中就是自己编写的没有编译的代码. target中是编译的Java中的class文件和一些不用编译的文件.这样也就明白了为什 ...
- 3.决策树ID3算法原理
1.决策树的作用 主要用于解决分类问题的一种算法 2.建立决策树的3中常用算法 1).ID3--->信息增益 2).c4.5--> 信息增益率 4).CART Gini系数 3.提出问题: ...
- ES6迭代器和生成器
一.迭代器 JavaScript 原有的表示"集合"的数据结构,主要是数组(Array)和对象(Object),ES6 又添加了Map和Set.这样就需要一种统一的接口机制,来处理 ...