共计 4488 个字符,预计需要花费 12 分钟才能阅读完成。
作者:韩信子 @ShowMeAI
教程地址:http://www.showmeai.tech/tuto…
本文地址:http://www.showmeai.tech/article-detail/84
申明:版权所有,转载请分割平台与作者并注明出处
1.Python 模块
在程序开发过程中,文件代码越来越长,保护越来越不容易。咱们把很多不同的性能编写成函数,放到不同的文件里,方便管理和调用。在 Python 中,一个.py 文件就称之为一个模块(Module)。
应用模块能够大大提高了代码的可维护性,而且当一个模块编写结束,就能够被其余中央援用。咱们在应用 python 实现很多简单工作时,也常常援用其余第 3 方模块,受害于弱小的 python 社区,简直咱们实现任何一项工作,都能够有对应的方便快捷可援用的库和模块来帮助。
模块是一个蕴含所有你定义的函数和变量的文件,以.py 后缀结尾。模块能够被别的程序引入和应用其中的函数性能。
上面是一个应用 python 规范库中模块的例子。
import sys
print('命令行参数如下:')
for i in sys.argv:
print(i)
print('\n\nPython 门路为:', sys.path, '\n')
执行后果如下所示:
$ python using_sys.py 参数 1 参数 2
命令行参数如下:
using_sys.py
参数 1
参数 2
Python 门路为:['/root', '/usr/lib/python3.10', '/usr/lib/python3.10/plat-x86_64-linux-gnu', '/usr/lib/python3.10/lib-dynload', '/usr/local/lib/python3.10/dist-packages', '/usr/lib/python3/dist-packages']
解释如下:
- import sys 引入 python 规范库中的 sys.py 模块;这是引入某一模块的办法。
- sys.argv 是一个蕴含命令行参数的列表。
- sys.path 蕴含了一个 Python 解释器主动查找所需模块的门路的列表。
2.import 语句
想应用 Python 模块,只需在另一个源文件里执行 import 语句,语法如下:
import module1[, module2[,... moduleN]
当解释器遇到 import 语句,如果在以后的搜寻门路中能搜寻到模块,就会间接导入。
搜寻门路是一个解释器会先进行搜寻的所有目录的列表。如想要导入模块 showmeai,须要把命令放在脚本的顶端:
showmeai.py 文件代码
def print_welcome(par):
print ("Welcome :", par)
return
test.py 文件代码
# 导入模块
import showmeai
# 当初能够调用模块里蕴含的函数了
showmeai.print_welcome("ShowMeAI")
以上代码输入后果 :
$ python3 test.py
Welcome : ShowMeAI
当咱们应用 import 语句的时候,Python 解释器会在搜寻门路中寻找对应模块,搜寻门路是由一系列目录名组成的,它是在 Python 编译或装置的时候确定的,装置新的库应该也会批改。搜寻门路被存储在 sys 模块中的 path 变量,做一个简略的试验,在交互式解释器中,输出以下代码:
>>> import sys
>>> sys.path
['','/usr/lib/python3.10','/usr/lib/python3.10/plat-x86_64-linux-gnu','/usr/lib/python3.10/lib-dynload','/usr/local/lib/python3.10/dist-packages','/usr/lib/python3/dist-packages']
>>>
sys.path 输入是一个门路列表,其中第一项是空串 ”,执行 python 解释器的当前目录。
咱们创立一个代码如下的 fibo.py 文件,把它放在 sys.path 中的任何一个目录外面:
def fib(n): # 定义到 n 的斐波那契数列
a, b = 0, 1
while b < n:
print(b, end=' ')
a, b = b, a+b
print()
def fib_new(n): # 返回到 n 的斐波那契数列
result = []
a, b = 0, 1
while b < n:
result.append(b)
a, b = b, a+b
return result
而后进入 Python 解释器,应用上面的命令导入这个模块:
>>> import fibo
就能够应用模块名称来拜访函数:
3. 实例
>>>fibo.fib(1000)
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
>>> fibo.fib_new(100)
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
>>> fibo.__name__
'fibo'
对于常常应用的函数,能够把它赋给一个本地的名称:
>>> my_fib = fibo.fib
>>> my_fib(500)
1 1 2 3 5 8 13 21 34 55 89 144 233 377
4.from … import 语句
Python 的 from 语句让你从模块中导入一个指定的局部到以后命名空间中,语法如下:
from modname import name1[, name2[, ... nameN]]
例如,要导入模块 fibo 的 fib 函数,应用如下语句:
>>> from fibo import fib, fib_new
>>> fib(500)
1 1 2 3 5 8 13 21 34 55 89 144 233 377
这个申明不会把整个 fibo 模块导入到以后的命名空间中,它只会将 fibo 里的 fib 函数引入进来。
5.from … import * 语句
把一个模块的所有内容全都导入到以后的命名空间也是可行的,只需应用如下申明:
from modname import *
例如,要导入模块 fibo 的 所有 函数,应用如下语句:
>>> from fibo import *
>>> fib(500)
1 1 2 3 5 8 13 21 34 55 89 144 233 377
6. 规范模块
Python 自身带着一些规范的模块库,有些模块间接被构建在解析器里,能很高效的应用。
比方模块 sys,它内置在每一个 Python 解析器中。变量 sys.ps1 和 sys.ps2 定义了主提示符和副提示符所对应的字符串:
>>> import sys
>>> sys.ps1
'>>>'
>>> sys.ps2
'...'
>>> sys.ps1 = 'C>'
C> print('ShowMeAI!')
ShowMeAI!
C>
7. 包
包是一种治理 Python 模块命名空间的模式,咱们常常会以「包. 模块」的模式来导入模块,例如一个模块的名称是 C.D,那么他示意一个包 C 中的子模块 D。应用这种模式不必放心不同库之间的模块重名的状况。
假如你想设计一套对立解决视频文件和数据的模块(或者称之为一个 ” 包 ”)。
现存很多种不同的音频文件格局(基本上都是通过后缀名辨别的,例如:.mp4,.wmv,.avi,.mkv),所以你须要有一组一直减少的模块,用来在不同的格局之间转换。
并且针对这些视频数据,还有很多不同的操作,所以你还须要一组宏大的模块来解决这些操作。
这里给出了一种可能的包构造(在分层的文件系统中):
video/ 顶层包
__init__.py 初始化 video 包
formats/ 文件格式转换子包
__init__.py
mp4read.py
mp4write.py
aviread.py
aviwrite.py
mkvread.py
mkvwrite.py
wmvread.py
wmvwrite.py
...
audio/ 声音成果子包
__init__.py
io.py
fx.py
tools.py
...
editor/ filters 子包
__init__.py
period.py
faster.py
slower.py
...
在导入一个包的时候,Python 会依据 sys.path 中的目录来寻找这个包中蕴含的子目录。
目录只有蕴含一个叫做 \_\_init\_\_.py 的文件才会被认作是一个包。最简略的解决是放一个空的 \_\_init\_\_.py 文件。
用户能够每次只导入一个包外面的特定模块,比方:
import video.audio.io
这将会导入子模块:video.audio.io。他必须应用全名去拜访:
video.audio.io.readfile(input)
还有一种导入子模块的办法是:
from video.audio import io
这同样会导入子模块: io,并且他不须要那些简短的前缀,所以他能够这样应用:
io.readfile(input)
还有一种变动就是间接导入一个函数或者变量:
from video.audio.io import readfile
同样的,这种办法会导入子模块: io,并且能够间接应用他的 readfile() 函数:
readfile(input)
当应用 from package import item 这种模式的时候,对应的 item 既能够是包外面的子模块(子包),或者包外面定义的其余名称,比方函数,类或者变量。
import 语法会首先把 item 当作一个包定义的名称,如果没找到,再试图依照一个模块去导入。如果还没找到,抛出一个 exc:ImportError 异样。
如果咱们应用形如 import item.subitem.subsubitem 这种导入模式,除了最初一项,都必须是包,而最初一项则能够是模块或者是包,然而不能够是类,函数或者变量的名字。
8. 视频教程
请点击到 B 站查看【双语字幕】版本
https://www.bilibili.com/vide…
材料与代码下载
本教程系列的代码能够在 ShowMeAI 对应的 github 中下载,可本地 python 环境运行,能迷信上网的宝宝也能够间接借助 google colab 一键运行与交互操作学习哦!
本教程系列波及的 Python 速查表能够在以下地址下载获取:
- Python 速查表
拓展参考资料
- Python 教程—Python3 文档
- Python 教程 - 廖雪峰的官方网站
ShowMeAI 相干文章举荐
- python 介绍
- python 装置与环境配置
- python 根底语法
- python 根底数据类型
- python 运算符
- python 条件管制与 if 语句
- python 循环语句
- python while 循环
- python for 循环
- python break 语句
- python continue 语句
- python pass 语句
- python 字符串及操作
- python 列表
- python 元组
- python 字典
- python 汇合
- python 函数
- python 迭代器与生成器
- python 数据结构
- python 模块
- python 文件读写
- python 文件与目录操作
- python 谬误与异样解决
- python 面向对象编程
- python 命名空间与作用域
- python 工夫和日期
ShowMeAI 系列教程举荐
- 图解 Python 编程:从入门到精通系列教程
- 图解数据分析:从入门到精通系列教程
- 图解 AI 数学根底:从入门到精通系列教程
- 图解大数据技术:从入门到精通系列教程