作者:韩信子@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参数2Python 门路为: ['/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数学根底:从入门到精通系列教程
- 图解大数据技术:从入门到精通系列教程