Python模块(python模块本质为什么文件)
off999 2024-09-21 20:56 40 浏览 0 评论
模块
你已经看到了如何在你的程序中重复使用代码——只需定义一次函数就可以对其重复调用了。如果你想在其他程序中复用你写的大量的函数时,怎么办?可能你已经猜到了,答案就是模块。
编写模块的方式有很多,但是最简单的方式就是创建一个包含很多方法和变量并以 .py 为扩展的文件。
另一种方法就是用编写 Python 解释器的语言来编写模块。例如,你可以用C语言来写模块,在使用标准 Python 解释器中进行编译时,这些模块会从你的 Python 代码中调用。
一个模块会被引入到一个程序来使用它的功能。这就是我们使用 Python 标准库的方法。首先,我们会了解如何使用标准库模块。
例子(保存为 module_using_sys.py ):
输出:
它是如何工作的:
首先,我们利用 import 引入 sys 模块,这基本上会告诉 Python ,我们想使用这个模块。 sys 模块包含着与 Python 解释器和它的环境(即系统)有关的函数。
当 Python 执行 import sys 语句时,它会查找 sys 模块。在这种情况下,它是一个内置模块,因此 Python 知道在哪里找到它。
如果它不是一个编译模块(即用 Python 编写的模块),那么 Python 解释器会在它的 sys.path 变量中列出来的目录中寻找它。如果模块被找到,则运行该模块主体中的语句,这个模块就会被设为 可用 供你使用。 注意,初始化在我们 第一次 引入这个模块时就会完成。
如果使用IDE编写和运行这些程序,请查找在菜单中为程序指定命令行参数的方法。
当我们执行 python module_using_sys.py we are arguments 命令的时候,我们使用 python 命令行运行模块 module_using_sys.py。后面的字符串 we are arguments 被作为参数传递给模块。Python 会把这些参数储存在 sys.argv 变量里以供后续使用。
记住,当前运行的模块名总储存在 sys.argv 列表的第一个元素中。所以执行以上语句后,sys.argv[0] 中存放着 'module_using_sys.py','we' 放在 sys.argv[1], 'are' 放在 sys.argv[2] 而 'arguments' 放在 sys.argv[3]。注意到 Python 中,数组索引从 0 开始计数而不是从 1 开始。
sys.path 是模块导入时要搜索的目录列表。我们可以看到 sys.path 的第一个字符串是空的,空字符串意味着当前目录也是 sys.path 的一部分,这与 PYTHONPATH 环境变量是相同的。这意味着你可以直接从当前目录下导入模块。不然你还需要把你要导入的模块放到 sys.path 中的一个目录里。
注意:当前目录指的是你的程序启动的目录。你可以通过执行 import os; print(os.getcwd()),来查看你的程序的当前目录。
字节码文件 .pyc
导入模块是一个相对而言开销较大的操作,因此,Python 试用了一些手段来使得导入模块的操作更加快速。其中一个方法,就是创建以 .pyc 为扩展名的 字节码 文件,它是一种中间形式,Python 会把程序代码转换成这样的形式,当你下一次想要在另外一个程序代码中导入模块的时候,这个 .pyc 文件就很有用 —— 导入操作会很快完成,这是因为导入模块所必须的一部分操作已经被事先完成了。此外,这些字节码文件都是平台无关的。
注意:这些 .pyc 文件一般会被创建在与它对应的 .py 文件相同的文件目录下。如果 Python 没有在该文件夹下写文件的权限,那么 .pyc 文件将不会被创建。
from..import 语句
如果你希望直接把 argv 变量导入到你的程序中(以避免每次都要键入 sys.),那么你就可以使用 from sys import argv 语句。
警告:原则上来说,还是要 避免 使用 from..import 语句,而是使用 import 语句。这是因为如果使用 import 语句的话,你的程序会避免出现命名冲突的问题,并且代码的可读性更高。
例:
模块的 __name__
每一个模块都有一个名称,在模块中我们可以通过判断语句来确定模块的名称。这在一种情形下特别有用:确定模块被导入了?还是在独立地运行。如之前提到过的,当模块第一次被导入的时候,模块的代码将被执行。我们可以通过这一点,让模块在被导入和独立运行时执行不同的操作。通过模块的 __name__ 属性可以实现这个功能。
示例(另存为 module_using_name.py):
输出:
代码是如何工作的?
每一个 Python 模块都定义了各自的 __name__。如果其值为 '__main__',这说明用户正在单独运行这个模块,这时我们可以进行合适的操作
创建你自己的模块
创建你自己的模块还是很容易的,你从一开始就在做这件事!这是因为每一个 Python 程序都是一个模块。你只需要保证这个程序以 .py 作为扩展名就行了。下面这个例子将会说明这件事。
例 (保存为 mymodule.py):
上面这个是一个 模块 的例子。正如你所看见的这样,比起我们普通的 Python 程序,它并没有什么特别不一样的地方。我们接下来将看到我们如何在另一个 Python 程序中使用到这个模块。
需要记住的是,这个模块的位置有两种选择:1、导入它的程序所处的文件夹下;2、sys.path 所列出的文件夹下。
另一个模块 (保存为 mymodule_demo.py):
输出:
它是如何工作的
需要注意的是,我们仍然还是使用 . 符号来访问模块的成员。Python 能够很好地复用同一个符号来让 Python 自身具有一种独特的「Pythonic」 感,从而这样一来我们就不需要不停地学习新的方法了。
下面是一个你用 from..import 语法的版本(保存为 mymodule_demo2.py)
mymodule_demo2.py 的输出和 mymodule_demo.py 是相同的。
需要注意的是,如果导入 mymodule 的模块中已经被有一个 __version__ 名称被声明了的话,那么这里就会产生命名冲突。这种情况是很可能出现的,因为一种常见的实践方式就是对每一个模块都使用这个名称来声明它自己的版本号。因此,尽管 import 语句可能会让你的程序代码稍微有点冗长,但是我们更加推荐你使用它。
你也可以使用:
这将会导入所有的诸如 say_hi 这样的公开名称(public names),但是不会导入 __version__,因为它以 2 个下划线作为前缀。
警告:记住,你应该避免使用 * 导入,比如像 from mymodule import * 这样。
Python 之禅
Python 的指导原则之一,就是「显式优于隐式」。你可以运行 import this 来了解更多的相关内容。
dir 函数
内置的 dir() 函数能以列表的形式返回某个对象定义的一系列标识符。如果这个对象是个模块,返回的列表中会包含模块内部所有的函数、类和变量。
这个函数接收一个可选的参数。当参数是模块名时,函数会返回对应模块的标识符列表。没有参数时则会返回当前模块的标识符列表。
例子:
代码是如何工作的?
首先我们用 dir 查看重要的 sys 模块。你可以看见这个模块包含的非常多的属性列表。
接下来,我们直接无参数调用 dir 函数。默认地,它会返回当前模块的属性列表。注意到上面导入的 sys 模块也是列表的一部分。
为了观察 dir 函数的行为,我们定义了一个变量 a,并给它随便赋了一个值,然后调用 dir 函数,我们可以看到列表中加入了同名的值。当我们通过 del 语句在当前模块中移除变量后,再次调用 dir 函数,可以发现输出列表也改变了,'a' 被移出了列表。
关于 del 的一点注释:这行语句执行后用于 删除 一个变量或标识符。在执行了 del a 之后,你就再也不能访问变量 a 了,它就像从未存在过一样。
注意 dir 函数对 任何 对象都有效。例如:dir(str) 会列出 str (String) 类的属性。
还有一个vars()函数,它有时能给你对象的属性和它们的值,但这个函数并不总是有效。
程序包
现在你一定已经开始观察组织程序的结构层次了。变量通常在函数的内部。全局变量和函数通常在模块的内部。如何组织模块呢?这就是程序包出场的时候了。
程序包就是一个装满模块的文件夹,它有一个特殊的 __init__.py 文件,这个文件告诉 Python 这个文件夹是特别的,因为它装着 Python 的模块。
让我们假设你想创建一个叫做 world 的程序包,它有很多子程序包 asia、africa 等。这些子程序包依次包含 india、madagascar 等模块。
以下是一种组织文件夹的方式:
程序包是分层组织模块的一种简便方式。你会在 标准库中找到许多程序包的实例。
如果说函数是程序的可重用部分,那么模块就是可重用的程序。程序包则是组织模块的另一个层次。Python 附带的标准库就是一组程序包,其中包括了许多模块。
我们已经学会了如何使用和编写自己的模块。
下一章我们会学习叫做数据结构的有趣概念。
喜欢请关注我,每天中午持续更新!
相关推荐
- 笔记本无音频输出设备(笔记本无音频输出设备)
-
1、没有声卡驱动,解决方法就是找到笔记本的官网,下载电脑声卡的驱动安装即可。2、没有外界的音频播放设备,解决方法就是买一个外界的音频播放设备插到电脑主机的音频接口上即可。笔记本电脑显示未安装任何音频输...
- iso文件能用手机打开吗(iso文件能用手机打开吗安全吗)
-
一般的压缩软件就可以打开的,比如,好压软件,这个打开只是解压形式的,如果你说的是运行iso文件,这个没有,况且安卓系统也不支持iso运行ISO文件一般用于光盘镜像文件的存储,如果想要在手机上运行ISO...
- win7系统卡顿怎么优化(win7很慢很卡怎么优化)
-
1、首先打开安全卫士,进入安全卫士首页,单击软件窗口右下角的“更多”图标,打开扩展应用程序。2、单击选择“我的工具”。3、在我的工具菜单里面找到“人工服务”单击打开人工服务。4、在人工服务对话框有很多...
- 如何查看c盘微信聊天记录(如何查看c盘微信聊天记录内存大小)
-
微信群中的消息只要没删除基本都能保存,想要找微信群中几个多月前的消息可以直接根据日期来查找聊天记录。操作如下:1、打开想要查找记录的微信群,点击右上角人形图标;2、点击查找聊天内容;3、选择按日...
- office2016家庭版激活密钥(office家庭版激活码2019)
-
走淘宝吧,因为零售版的密钥只能用一次。大概几块钱就能激活2016。如果你不在乎钱的话可以向我一样,订阅一个office365.实在不行可以和几个人一起买一个家庭版的365.出现这个情况,找微软申诉是没...
- 移动硬盘驱动器下载安装(移动硬盘驱动器下载安装教程)
-
1、右键单击您的桌面,选择“新建文件夹”,并命名该文件夹(例如“usb驱动程序”);2、然后到本站下载驱动程序;3、将其解压缩至在您的桌面上刚刚创建的usb驱动程序文件夹;4、单击开始菜单,然后选择设...
- 电脑硬盘格式化工具(电脑 格式化硬盘)
-
硬盘格式化工具很多,PQMACGIG8.0(中文就叫硬盘分区魔法师)是比较好的一个,这个是在WINDOWS下比叫好用,(个人感觉)FDISK也是比较好的一个,这个一般用在DOS下分区格式化WIN...
- photoshop是一款什么软件(ps指的是什么软件)
-
这个说法是错误的,ps软件“即:photoshop”是由美国著名的“adobe阿多比”公司出品的专业的图像处理软件,它不是由微软公司出品的软件。众所周知的是,微软公司以设计视窗操作系统名满全球,它出...
- ipad越狱的好处与坏处(ipad越狱好不好)
-
好处一: 1、重命名、重组应用程序 如果你看着Sparrow(iOS最优秀邮件客户端)这个名字不爽,越狱之后就可以改成“Email”,如果你觉得“豆瓣电台”这个名字不给力,那就改成“中央人民广...
- win7光盘重装系统步骤图解(win7光盘如何重装系统)
-
1.确认您的电脑支持从光盘启动。如果支持,可以直接将Windows7安装光盘插入电脑的光驱中。 2.打开电脑,按下F2、F10、F12或Delete等键进入BIOS设置界面。 ...
- 电脑已联网却无法上网(电脑已经联网了但是不能上网)
-
电脑连上网后,仍可能存在无法上网的情况,这可能是由多种原因造成的。以下是一些可能的原因和解决方法:1.浏览器问题:有时候,浏览器可能会出现故障,导致无法正常访问网络。您可以尝试清除浏览器的缓存和co...
- u盘价格一览表(u盘单价)
-
不同品牌价格不同,不同内存价格也不同,例如8g、16g、32g、64g等多种容量大小的,根据容量的不同,报价在29元到120元之间不等。闪存盘虽然小,但相对来说却有很大的存储容量。U盘大多能够存储比一...
- windows查看ip命令(windows如何查看ip地址)
-
查看电脑IP: 1)使用Windows+R键打开“运行”窗口,然后输入CMD进入命令提示窗口2)进入命令窗口之后,输入:ipconfig/all回车即可...
- 内存条的作用(内存条的作用和参数配置)
-
内存条是存储电脑运行所需的数据和程序,帮助CPU快速读取和运行,提高计算机的运行速度和处理能力。内存条也被称为随机存取存储器(RAM),是电脑中非常必要的一个组件。常见的内存条类型有DDR、DDR2、...
- autocad2012安装失败(autocad2012无法安装)
-
如果您遇到CAD2012安装不了的问题,可能有几个原因导致这种情况。以下是一些常见的解决方法:1.确保系统要求:首先,请确保您的计算机符合CAD2012的系统要求。检查您的操作系统版本、内存、处理器...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
python入门到脱坑 输入与输出—str()函数
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
失业程序员复习python笔记——条件与循环
-
系统u盘安装(win11系统u盘安装)
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
