作者:韩信子@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数学根底:从入门到精通系列教程
  • 图解大数据技术:从入门到精通系列教程