第五章

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学习之模块-模块(一)的更多相关文章

  1. Python学习 Part4:模块

    Python学习 Part4:模块 1. 模块是将定义保存在一个文件中的方法,然后在脚本中或解释器的交互实例中使用.模块中的定义可以被导入到其他模块或者main模块. 模块就是一个包含Python定义 ...

  2. python学习之argparse模块

    python学习之argparse模块 一.简介: argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块.argparse模块的作用是用于解析命令行 ...

  3. Python学习day19-常用模块之re模块

    figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...

  4. Python学习day18-常用模块之NumPy

    figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...

  5. python学习之random模块

    Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...

  6. Python学习笔记011_模块_标准库_第三方库的安装

    容器 -> 数据的封装 函数 -> 语句的封装 类 -> 方法和属性的封装 模块 -> 模块就是程序 , 保存每个.py文件 # 创建了一个hello.py的文件,它的内容如下 ...

  7. Python学习笔记之模块与包

    一.模块 1.模块的概念 模块这一概念很大程度上是为了解决代码的可重用性而出现的,其实这一概念并没有多复杂,简单来说不过是一个后缀为 .py 的 Python 文件而已 例如,我在某个工作中经常需要打 ...

  8. Python学习笔记-常用模块

    1.python模块 如果你退出 Python 解释器并重新进入,你做的任何定义(变量和方法)都会丢失.因此,如果你想要编写一些更大的程序,为准备解释器输入使用一个文本编辑器会更好,并以那个文件替代作 ...

  9. Python学习笔记1—模块

    模块的使用 引用模块的两种形式 形式一: import module_name 形式二: from module1 import module11   (module11是module的子模块) 例: ...

  10. Python学习笔记2——模块的发布

    1.为模块nester创建文件夹nester,其中包含:nester.py(模块文件): """这是"nester.py"模块,提供了一个名为prin ...

随机推荐

  1. zabbix的简单操作(proxy代理分布式监控)

    分布式监控 作用:分担压力,减轻负载,多机房监控 通过zabbix proxy的搭建,zabbix server可以远程从proxy获取到数据,这里的环境相当于zabbix server具有一个公网i ...

  2. jdk1.8环境变量配置

    JAVA_HOME=/usr/java/jdk1.8.0_45PATH=$JAVA_HOME/bin:$PATHCLASSPATH=.:$JAVA_HOME/jre/lib/ext:$JAVA_HOM ...

  3. 处理并解决mysql8.0 caching-sha2-password问题,开启远程访问

    原文:https://blog.csdn.net/u010026255/article/details/80062153 启动mysql服务:service mysqld start ALTER US ...

  4. qt5--列表控件QListWidget

    需要   #include <QListWidget>            #include <QListWidgetItem> 列表控件可以让我们以列表形式呈现内容,是界面 ...

  5. C# Stopwatch 延时

    using System; using System.Diagnostics; using System.Runtime.InteropServices; using System.Threading ...

  6. 走进Github的世界

    1.官网注册账号 2.官网向导: https://guides.github.com/activities/hello-world/ 值得推荐: Git手册: https://git-scm.com/ ...

  7. 2、DockPanel

    DockPanel——停靠面板,内部控件或容器可以放置在上.下.左(默认).右.类似于Java AWT布局中的BorderLayout. 但与BorderLayout不同的是,每一个区域可以同时放置多 ...

  8. c# 使用Split分割 换行符

    c# 使用Split分割 换行符,方法如下(其余方法有空再添加): string str = "aa" + "\r\n" + "bb"; s ...

  9. Android 一般动画animation和属性动画animator

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...

  10. 微信小程序_简单组件使用与数据绑定

    简单的数据传值 官方文档:传送门 点击"按钮"测试后,按钮文本改变,下方text文本改变,通过console.log()在输出台中打印按钮文本信息 程序结构 Page({ //页面 ...