Python模块(python模块本质为什么文件)
off999 2024-09-21 20:56 49 浏览 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 附带的标准库就是一组程序包,其中包括了许多模块。
我们已经学会了如何使用和编写自己的模块。
下一章我们会学习叫做数据结构的有趣概念。
喜欢请关注我,每天中午持续更新!
相关推荐
- 安全教育登录入口平台(安全教育登录入口平台官网)
-
122交通安全教育怎么登录:122交通网的注册方法是首先登录网址http://www.122.cn/,接着打开网页后,点击右上角的“个人登录”;其次进入邮箱注册,然后进入到注册页面,输入相关信息即可完...
- 大鱼吃小鱼经典版(大鱼吃小鱼经典版(经典版)官方版)
-
大鱼吃小鱼小鱼吃虾是于谦跟郭麒麟的《我的棒儿呢?》郭德纲说于思洋郭麒麟作诗的相声,最后郭麒麟做了一首,师傅躺在师母身上大鱼吃小鱼小鱼吃虾虾吃水水落石出师傅压师娘师娘压床床压地地动山摇。...
-
- 哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)
-
要想将ppt免费转换为pdf的话,我们建议大家可以下一个那个wps,如果你是会员的话,可以注册为会员,这样的话,在wps里面的话,就可以免费将ppt呢转换为pdfpdf之后呢,我们就可以直接使用,不需要去直接不需要去另外保存,为什么格式转...
-
2026-02-04 09:03 off999
- 电信宽带测速官网入口(电信宽带测速官网入口app)
-
这个网站看看http://www.swok.cn/pcindex.jsp1.登录中国电信网上营业厅,宽带光纤,贴心服务,宽带测速2.下载第三方软件,如360等。进行在线测速进行宽带测速时,尽...
- 植物大战僵尸95版手机下载(植物大战僵尸95 版下载)
-
1可以在应用商店或者游戏平台上下载植物大战僵尸95版手机游戏。2下载教程:打开应用商店或者游戏平台,搜索“植物大战僵尸95版”,找到游戏后点击下载按钮,等待下载完成即可安装并开始游戏。3注意:确...
- 免费下载ppt成品的网站(ppt成品免费下载的网站有哪些)
-
1、Chuangkit(chuangkit.com)直达地址:chuangkit.com2、Woodo幻灯片(woodo.cn)直达链接:woodo.cn3、OfficePlus(officeplu...
- 2025世界杯赛程表(2025世界杯在哪个国家)
-
2022年卡塔尔世界杯赛程公布,全部比赛在卡塔尔境内8座球场举行,2022年,决赛阶段球队全部确定。揭幕战于当地时间11月20日19时进行,由东道主卡塔尔对阵厄瓜多尔,决赛于当地时间12月18日...
- 下载搜狐视频电视剧(搜狐电视剧下载安装)
-
搜狐视频APP下载好的视频想要导出到手机相册里方法如下1、打开手机搜狐视频软件,进入搜狐视频后我们点击右上角的“查找”,找到自已喜欢的视频。2、在“浏览器页面搜索”窗口中,输入要下载的视频的名称,然后...
- 永久免费听歌网站(丫丫音乐网)
-
可以到《我爱音乐网》《好听音乐网》《一听音乐网》《YYMP3音乐网》还可以到《九天音乐网》永久免费听歌软件有酷狗音乐和天猫精灵,以前要跳舞经常要下载舞曲,我从QQ上找不到舞曲下载就从酷狗音乐上找,大多...
- 音乐格式转换mp3软件(音乐格式转换器免费版)
-
有两种方法:方法一在手机上操作:1、进入手机中的文件管理。2、在其中选择“音乐”,将显示出手机中的全部音乐。3、点击“全选”,选中所有音乐文件。4、点击屏幕右下方的省略号图标,在弹出菜单中选择“...
- 电子书txt下载(免费的最全的小说阅读器)
-
1.Z-library里面收录了近千万本电子书籍,需求量大。2.苦瓜书盘没有广告,不需要账号注册,使用起来非常简单,直接搜索预览下载即可。3.鸠摩搜书整体风格简洁清晰,书籍资源丰富。4.亚马逊图书书籍...
- 最好免费观看高清电影(播放免费的最好看的电影)
-
在目前的网上选择中,IMDb(互联网电影数据库)被认为是最全的电影网站之一。这个网站提供了各种类型的电影和电视节目的海量信息,包括剧情介绍、演员表、评价、评论等。其还提供了有关电影制作背后的详细信息,...
- 孤单枪手2简体中文版(孤单枪手2简体中文版官方下载)
-
要将《孤胆枪手2》游戏的征兵秘籍切换为中文,您可以按照以下步骤进行操作:首先,打开游戏设置选项,通常可以在游戏主菜单或游戏内部找到。然后,寻找语言选项或界面选项,点击进入。在语言选项中,选择中文作为游...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
win7系统还原步骤图解(win7还原电脑系统的步骤)
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
python入门到脱坑 输入与输出—str()函数
-
16949认证费用是多少(16949审核员太难考了)
-
linux软件(linux软件图标)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
windows7旗舰版多少钱(win7旗舰版要多少钱)
-
- 最近发表
- 标签列表
-
- 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)
