Python |16—模块
本文最后更新于41 天前,其中的信息可能已经过时,如有错误请发送邮件到2031853749@qq.com

Python提供了强大的模块支持, 不仅体现在Python标准库中包含了大量的模块, 还可以通过第三方模块来扩展功能.

这里举一个使用标准库模块的例子:

import sys

print('命令行参数如下:')
for i in sys.argv:
   print(i)

print('\n\nPython 路径为:', sys.path, '\n')

这个例子中, 我们导入了sys模块, 然后使用sys.argvsys.path两个变量来获取命令行参数和Python的搜索路径.

模块概述

为了编写可维护的代码, 我们把很多函数分组, 分别放到不同的文件里, 这样每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式. 在Python中, 一个.py文件就称之为一个模块.

使用模块有什么好处?

最大的好处是大大提高了代码的可维护性.

其次编写代码不必从零开始. 当一个模块编写完毕, 就可以被其他地方引用. 我们在编写程序的时候, 也经常引用其他模块, 包括Python内置的模块和来自第三方的模块.

使用模块还可以避免函数名和变量名冲突. 相同名字的函数和变量完全可以分别存在不同的模块中, 因此我们自己在编写模块时, 不必考虑名字会与其他模块冲突. 但是也要尽量不要与内置函数名字冲突.

自定义模块

自定义模块主要有两个作用:

  1. 代码重用: 我们可以把一些常用的函数和类封装到模块中, 然后在其他地方引用.
  2. 组织代码: 我们可以把相关的代码放在一个模块中, 这样代码的可读性和维护性都有很大提高.

创建模块

创建一个模块很简单, 只需要创建一个.py文件, 然后在文件中定义函数和类, 就可以作为模块使用.

但是设置的模块名不能是Python自带的标准库中的模块名, 否则会导致冲突.

使用import导入模块

导入模块使用import语句, 语法如下:

import 模块名 [as 别名]

当解释器遇到 import 语句, 如果模块在当前的搜索路径就会被导入.

搜索路径时一个解释器会先进行搜索的所有目录的列表. 如想要导入模块, 需要把命令放在脚本的顶端.

一个模块只会被导入一次, 不管你执行了多少次 import. 这样可以防止导入模块被一遍又一遍地执行.

导入模块后, 可以使用模块名访问模块中的函数和类.

如果模块名太长, 可以使用as给模块取一个别名, 这样可以简化代码.

在调用模块中的函数或类时, 可以用模块名.函数名模块名.类名的形式来调用.

使用import语句还可以一次性导入多个模块, 语法如下:

import 模块1, 模块2, 模块3...

使用from…import…语句导入模块

在使import语句导入模块时, 每执行一次都会创建一个新的命名空间, 并且在该命名空间中执行与.py文件相关的所有语句.

在执行的时候需要再具体的变量, 函数, 类名前加前缀.

如果不想在每次导入模块时都创建一个新的命名空间, 而只是将具体的定义导入到当前的命名空间中, 就可以使用from...import...语句.

且不需要再加前缀, 直接使用函数或类名即可.

语法如下:

from 模块名 import members

members可以是函数, 类, 变量等, 多个成员用逗号隔开. 如果要导入多个成员, 则可以用星号*表示全部导入.

from 模块名 import *

这样可以一次性导入模块中的所有成员.

在使用from...import...语句导入模块时, 需要保证所导入的内容在当前的命名空间中没有重名的定义. 后导入的成员会覆盖前面的成员.

模块搜索目录

当使用import语句导入模块时, 默认情况下会按照以下顺序进行查找:

  1. 当前目录(即执行的脚本所在的目录)
  2. 环境变量PYTHONPATH指定的目录
  3. Python安装目录的Lib目录

以上各个目录的具体位置保存在标准模块syspath变量中, 可以通过以下代码查看:

import sys
print(sys.path)

模块的包

使用模块可以避免由于模块名冲突导致的命名空间冲突, 但如果模块太多或者重复, 那么管理起来就比较麻烦.

为了解决这个问题, Python提供了包(package)的概念. 包是一个目录, 里面包含多个模块和子包.

创建和使用包

创建包实际上就是创建一个文件夹, 然后在文件夹中创建一个__init__.py文件, 这个文件可以为空, 也可以包含模块的导入和初始化代码.

创建完包后, 就可以在包中创建模块, 也可以在包中创建子包.

从包中加载模块通常有以下三种方式:

1.通过”import+完整包名.模块名”的形式导入指定模块:

import mypackage.mymodule

这个时候调用变量或者函数时, 需要再加上包名作为前缀, 即mypackage.mymodule.变量名mypackage.mymodule.函数名().

2.通过”from+完整包名+import+模块名”的形式导入指定模块:

from mypackage import mymodule

这个时候调用变量或者函数时, 直接用模块名作为前缀即可, 即mymodule.变量名mymodule.函数名().

3.通过”from+完整包名+模块名+import+定义名”的形式导入指定成员:

from mypackage.mymodule import 定义名

这个时候调用变量或者函数时, 直接用定义名作为前缀即可, 即变量名函数名().

以主程序的形式执行(name属性)

有的时候我们需要让一个模块作为主程序的入口文件, 这样可以让模块中的代码在被导入时不会被执行, 只有在主程序运行时才会被执行.

为了实现这个功能, 我们可以在模块的开头加上以下代码:

if __name__ == '__main__':
    # 主程序的代码

这样当模块被直接运行时, 代码块中的代码才会被执行. 当模块被导入时, 代码块中的代码不会被执行.

例如, 我们有一个mymodule.py文件, 内容如下:

def my_func():
    print('This is my module')

if __name__ == '__main__':
    my_func()

当我们在命令行中运行python mymodule.py时, 输出This is my module, 说明my_func()函数在主程序运行时被执行.

当我们导入mymodule模块时, 由于if __name__ == '__main__':代码块不会被执行, 所以my_func()函数不会被执行.

注意事项

  1. 主程序的入口文件必须是__main__.py
  2. 主程序的入口文件必须放在包的根目录下
  3. 主程序的入口文件必须包含if __name__ == '__main__':代码块
  4. 主程序的入口文件可以包含其他代码, 但这些代码必须在if __name__ == '__main__':代码块中

在每个模块中, __name__属性的值永远是模块的名字. 如果模块是被导入的, 那么__name__的值就是模块的名字. 如果模块是被直接运行的, 那么__name__的值就是'__main__'字符串.

因此, 在模块中, 可以通过if __name__ == '__main__':代码块来判断当前模块是否是主程序的入口文件. 如果是, 则执行模块中的代码. 如果不是, 则不执行模块中的代码.

注意: __name__这里是双下划线.

引用其他模块

Python除了自定义模块, 还可以引用其他模块, 包括Python标准库中的模块和第三方模块.

导入和使用标准库模块

Python标准库提供了大量的模块, 我们可以直接使用这些模块来解决编程问题.

例如导入math模块, 就可以使用其中的数学函数:

import math  # 导入math模块

print(math.sqrt(9))  # 计算平方根
print(math.pi)  # 计算圆周率

Python提供了大量的标准库模块, 常用的标准模块及其描述如下:

  • sys: 系统相关功能, 用于退出Python解释器, 访问命令行参数, 环境变量等.
  • os: 操作系统相关功能, 用于文件和目录的操作, 进程管理, 网络通信等.
  • time: 时间相关功能, 用于获取当前时间, 日期, 时区等.
  • calendar: 日历相关功能, 用于处理日期, 星期等.
  • urllib: URL处理相关功能, 用于处理URL, 抓取网页, 下载文件等.
  • json: JSON数据处理相关功能, 用于处理JSON数据.
  • re: 正则表达式相关功能, 用于处理字符串匹配.
  • random: 随机数相关功能, 用于生成随机数.
  • math: 数学相关功能, 用于计算常用数学函数, 如平方根, 三角函数等.
  • decimal: 十进制浮点数相关功能, 用于处理高精度的浮点数.
  • shutil: 文件和目录相关功能, 用于复制, 移动, 删除文件和目录.
  • logging: 日志记录相关功能, 用于记录程序运行日志.
  • tkinter: GUI编程相关功能, 用于创建图形用户界面.
  • sqlite3: SQLite数据库相关功能, 用于处理SQLite数据库.

其他的标准库模块可以参考官方文档: https://docs.python.org/3/library/index.html

导入和使用第三方模块

除了使用Python标准库模块, 我们还可以导入第三方模块. 这些模块一般由Python社区提供, 并经过测试和验证, 安全可靠. 可以在PyPI(Python Package Index)(https://pypi.python.org/pypi/)上搜索到.

使用Python第三方模块时, 需要先安装, 然后可以像使用标准库模块一样导入.

安装第三方模块可以使用pip命令, 语法如下:

pip <command> [modulename]
  • command: 安装(install), 卸载(uninstall), 升级(upgrade), 列出(list)等命令.
  • modulename: 要安装的模块名.

安装第三方模块时, 可以在命令提示符或终端中运行上述命令, 也可以在Python程序中使用subprocess模块调用命令行安装命令.

anaconda

Anaconda是一个基于Python的数据处理和科学计算平台, 它已经内置了许多非常有用的第三方库, 我们装上Anaconda, 就相当于把数十个第三方模块自动安装好了, 非常简单易用.

Anaconda安装包有500~600M, 所以需要耐心等待下载. 下载后直接安装, Anaconda会把系统Path中的python指向自己自带的Python, 并且, Anaconda安装的第三方模块会安装在Anaconda自己的路径下, 不影响系统已安装的Python目录.

Anaconda安装后, 我们可以直接使用pip命令安装第三方模块, 例如:

pip install Pillow

这样,Pillow模块就会被安装到Anaconda的路径下,我们就可以直接使用了.

anaconda安装教程:https://blog.csdn.net/qq_44000789/article/details/142214660

Pycharm

Pycharm提供了一些第三方模块的安装功能, 我们可以直接在Pycharm中安装第三方模块.

https://blog.csdn.net/W_REP/article/details/117134384
本文为2305拾柒原创.
文章作者:拾 柒
文章链接:Python |16—模块
版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0许可协议. 转载请注明来自拾 柒
如果觉得有用,可以分享出去~
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇