c#

位置:IT落伍者 >> c# >> 浏览文章

从C#到Python——5模块和包


发布日期:2021年10月15日
 
从C#到Python——5模块和包

本章是《从到Python》系列连载的最后一章内容较简单主要介绍Python中模块与包的使用方法如果你对这部分内容已经比较熟悉就不要再浪费时间看了写这一章只是为了整个系列完整而已没什么新的东西(本章内容主要参考了《Python精要参考》的第八章《模块和包》)

模块

Python的脚本都是用扩展名为py的文本文件保存的一个脚本可以单独运行也可以导入另一个脚本中运行当脚本被导入运行时我们将其称为模块(module)模块是Python组织代码的基本方式

模块名与脚本的文件名相同例如我们编写了一个名为Itemspy的脚本则可在另外一个脚本中用import Items语句来导入它在导入时Python解释器会先在脚本当前目录下查找如果没有则在syspath包含的路径中查找

在导入模块时Python会做以下三件事

() 为模块文件中定义的对象创建一个名字空间通过这个名字空间可以访问到模块中定义的函数及变量

() 在新创建的名字空间里执行模块文件

() 创建一个名为模块文件的对象该对象引用模块的名字空间这样就可以通过这个对象访问模块中的函数及变量

importsys

printsyspath

如果要同时导入多个模块可以用逗号分隔 import sys os

可以使用as关键字来改变模块的引用对象名import os as system

也可以用from语句将模块中的对象直接导入到当前的名字空间(不创建模块名字空间的引用对象)from socket import gethostname

from语句支持逗号分割的对象也可以使用星号(*)代表模块中除下划线开头的所有对象from socket import *这是个懒省事的方法我是经常用不过用之前最好先搞清楚会不会覆盖当前名字空间中的函数名等总之不是个好习惯:)

除了Python脚本(不仅限于py还包括pyc和pyo)import语句还可以导入C或扩展(已编译为共享库或DLL文件)包(包含多个模块一会介绍)和内建模块(使用C编写并已链接到Python解释器内)不过除了包另外两个我也没用过:(

Python解释器在第一次import一个py文件的时候会尝试将其编译为字节码文件这个文件的扩展名通常为pyc它是已经完成语法检查并转译为虚拟机指令的代码后边的导入操作会直接读取pyc文件而不是py文件一般而言速度会更快

Python的模块可以按目录组织为包(package)一般来说我们将多个关系密切的模块组织成一个包以便于维护和使用同时可有效避免名字空间沖突创建一个包的步骤是建立一个名字为包名字的文件夹并在该文件夹下创建一个__init__py文件你可以根据需要在该文件夹下存放脚本文件已编译扩展及子包

一个典型的包可能有以下结构:

package/

__init__py

subPack/

__init__py

module_py

module_py

module_py

subPack/

__init__py

module_py

module_py

……

只要目录下存在__init__py就表明此目录应被作为一个package处理在最简单的例子中__init__py 是一个空文件不过一般我们都要在__init__py中做一些包的初始化动作或是设定一些变量

最常用的变量是__all__当使用包的人在用from pack import * 语句导入的时候系统会查找目录pack下的__init__py文件中的__all__这个变量__all__是一个list包含了所有应该被导入的模块名称例如__all__ = [m m m] 表示当from pack import * 时会import 这三个module

如果没有定义__all__from pack import * 不会保证所有的子模块被导入所以要么通过__initpy__要么显式地import 以保证子模块被导入import packm packm packm

本章小结

本章介绍了Python中模块与包的使用方法要点如下

() 模块是一个可以导入的Python脚本文件

() 包是一堆按目录组织的模块和子包目录下的__init__py文件存放了包的信息

() 可以用import import as form import 等语句导入模块和包

总之模块与包是在物理上组织Python代码复用的一种有效方式它有点类似于中的程序集(Assembly)初学Python不一定要会自己建立模块和包但一定要学会使用各种包这正是Python的强大之处Python带着各种各样的battery当你想完成一项功能时最好先去搜索是不是有相关的包能够复用(多数情况下是这样的因为在各种领域都有太多的人在为Python作着贡献)而且绝大多数Python包都是开源的研读优秀的代码也是提高编程能力的一种有效途径

进一步阅读的参考

《从C#到Python》系列连载到今天就全部写完了非常感谢各位的支持鼓励以及批评使我能够不断完善和提高读完这个连载在Python的语法上应该够应付一阵了当然结合具体的应用领域还是有很多东西需要不断学习在此向大家推荐一些有用的读物

[] 科学计算方面这个是我的应用Python的主阵地推荐HYRY Studio的《用Python做科学计算》(见)我个人认为非常优秀的一本原创着作(这么好的书不知为何不正式出版钦佩作者的rp !)

[] GUI开发方面如果你用wxPython那么肯定要看《wxPython in Action》(中文版见)而我个人主要用PyQt这方面值得推荐的读物是柴树杉翻译的《PyQt 编程简介》(见html)如果英文好还是推荐看《Rapid GUI Programming with Python and Qt》(英文pdf版地址Octpdf)

[] 开发方面这个我还没有涉及Django的资料网上也是大把了其它的Python Web开发框架也是多如牛毛自己找找吧

[] 方面最近准备用PyS做点小东西不过一直抽不出时间来下载了《PyS Library Reference》(中文版地址pdf)一直没时间看呢所以不好推荐不过官方的东西应该是差不了的另外园子里Lucker的blog上有一些关于PyS开发的不错文章我虽收藏了但也是一直没时间详细看呵呵以后再说了

               

上一篇:自定义事件实现不同窗体间的通讯C#篇

下一篇:C#默认构造函数的作用