关于python:图解python-模块

37次阅读

共计 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 数学根底:从入门到精通系列教程
  • 图解大数据技术:从入门到精通系列教程

正文完
 0