图解python | 模块

简介: 在Python中,一个.py文件就称为一个模块(Module),包含很多不同功能编写成的函数。包是用来管理Python模块命名空间的形式,经常以「包.模块」的形式来导入模块。

ShowMeAI研究中心

作者:韩信子@ShowMeAI
教程地址http://www.showmeai.tech/tutorials/56
本文地址http://www.showmeai.tech/article-detail/84
声明:版权所有,转载请联系平台与作者并注明出处


1.Python模块

在程序开发过程中,文件代码越来越长,维护越来越不容易。我们把很多不同的功能编写成函数,放到不同的文件里,方便管理和调用。在Python中,一个.py文件就称之为一个模块(Module)。

使用模块可以大大提高了代码的可维护性,而且当一个模块编写完毕,就可以被其他地方引用。我们在使用python完成很多复杂工作时,也经常引用其他第3方模块,受益于强大的python社区,几乎我们完成任何一项任务,都可以有对应的方便快捷可引用的库和模块来协助。

Python模块(Module)

模块是一个包含所有你定义的函数和变量的文件,以.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。使用这种形式不用担心不同库之间的模块重名的情况。
Python包(Package)

假设你想设计一套统一处理视频文件和数据的模块(或者称之为一个"包")。

现存很多种不同的音频文件格式(基本上都是通过后缀名区分的,例如: .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站查看有【中英字幕】的版本

[video(video-b43fgTQ0-1645638109122)(type-bilibili)(url-https://player.bilibili.com/player.html?aid=505628451&page=26)(image-https://img-blog.csdnimg.cn/img_convert/09d6f09033a125ca0aff28fbc425a358.png)(title-【双语字幕+资料下载】Python 3全系列基础教程,全程代码演示&讲解!10小时视频42节,保证你能掌握Python!快来一起跟着视频敲代码~<快速入门系列>)]


资料与代码下载

本教程系列的代码可以在ShowMeAI对应的github中下载,可本地python环境运行,能访问Google的宝宝也可以直接借助google colab一键运行与交互操作学习哦!

本教程系列涉及的Python速查表可以在以下地址下载获取:

拓展参考资料

ShowMeAI相关文章推荐

ShowMeAI系列教程推荐

showmeai

目录
相关文章
|
17天前
|
存储 开发者 Python
Python中的collections模块与UserDict:用户自定义字典详解
【4月更文挑战第2天】在Python中,`collections.UserDict`是用于创建自定义字典行为的基类,它提供了一个可扩展的接口。通过继承`UserDict`,可以轻松添加或修改字典功能,如在`__init__`和`__setitem__`等方法中插入自定义逻辑。使用`UserDict`有助于保持代码可读性和可维护性,而不是直接继承内置的`dict`。例如,可以创建一个`LoggingDict`类,在设置键值对时记录操作。这样,开发者可以根据具体需求定制字典行为,同时保持对字典内部管理的抽象。
|
19天前
|
存储 缓存 算法
Python中collections模块的deque双端队列:深入解析与应用
在Python的`collections`模块中,`deque`(双端队列)是一个线程安全、快速添加和删除元素的双端队列数据类型。它支持从队列的两端添加和弹出元素,提供了比列表更高的效率,特别是在处理大型数据集时。本文将详细解析`deque`的原理、使用方法以及它在各种场景中的应用。
|
4天前
|
Python
python学习14-模块与包
python学习14-模块与包
|
6天前
|
SQL 关系型数据库 数据库
Python中SQLite数据库操作详解:利用sqlite3模块
【4月更文挑战第13天】在Python编程中,SQLite数据库是一个轻量级的关系型数据库管理系统,它包含在一个单一的文件内,不需要一个单独的服务器进程或操作系统级别的配置。由于其简单易用和高效性,SQLite经常作为应用程序的本地数据库解决方案。Python的内置sqlite3模块提供了与SQLite数据库交互的接口,使得在Python中操作SQLite数据库变得非常容易。
|
11天前
|
索引 Python
「Python系列」Python operator模块、math模块
Python的`operator`模块提供了一系列内置的操作符函数,这些函数对应于Python语言中的内建操作符。使用`operator`模块可以使代码更加清晰和易读,同时也能提高性能,因为它通常比使用Python内建操作符更快。
27 0
|
15天前
|
数据采集 网络协议 API
python中其他网络相关的模块和库简介
【4月更文挑战第4天】Python网络编程有多个流行模块和库,如requests提供简洁的HTTP客户端API,支持多种HTTP方法和自动处理复杂功能;Scrapy是高效的网络爬虫框架,适用于数据挖掘和自动化测试;aiohttp基于asyncio的异步HTTP库,用于构建高性能Web应用;Twisted是事件驱动的网络引擎,支持多种协议和异步编程;Flask和Django分别是轻量级和全栈Web框架,方便构建不同规模的Web应用。这些工具使网络编程更简单和高效。
|
19天前
|
数据采集 数据挖掘 Python
Python中collections模块的Counter计数器:深入解析与应用
在Python的`collections`模块中,`Counter`是一个强大且实用的工具,它主要用于计数可哈希对象。无论是统计单词出现的频率,还是分析数据集中元素的分布情况,`Counter`都能提供快速且直观的结果。本文将深入解析`Counter`计数器的原理、用法以及它在实际应用中的价值。
|
20天前
|
Python
Python中的math和cmath模块:数学运算的得力助手
Python作为一种功能强大的编程语言,提供了丰富的数学运算功能。其中,math和cmath模块就是Python中用于数学运算的重要工具。math模块提供了基本的数学函数和常量,适用于实数运算;而cmath模块则提供了对复数运算的支持,使得Python在数学计算和工程应用中更加灵活和强大。
|
23天前
|
数据挖掘 Python
Python中的datetime模块:轻松拿捏时间操作
Python的`datetime`模块是处理日期和时间的核心工具,包括`date`、`time`、`datetime`、`timedelta`类。它可以创建、操作和格式化日期时间。
19 2
|
25天前
|
Python
Python random模块(获取随机数)常用方法和使用例子
`random`模块在Python中用于生成随机数。
21 0

热门文章

最新文章