知识大全 从C#到Python——5模块和包

Posted 文件

篇首语:成功无须解释,失败却有许多托辞。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 从C#到Python——5模块和包相关的知识,希望对你有一定的参考价值。

从C#到Python——5模块和包  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

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

     模块

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

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

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

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

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

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

    import sys   print sys path

  如果要同时导入多个模块 可以用逗号分隔 如 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 * 不会保证所有的子模块被导入 所以要么通过__init py__ 要么显式地import 以保证子模块被导入 如 import pack m   pack m   pack m

     本章小结

  本章介绍了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 编程简介》(见) 如果英文好 还是推荐看《Rapid GUI Programming with Python and Qt》(英文pdf版地址 Oct pdf)

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

cha138/Article/program/ASP/201311/21672

相关参考

知识大全 Java 和 Python

幸福的联姻:Java和Python  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本文节录自《L

知识大全 c#记事本实现代码

  编辑模块只实现了全选和时间个功能自动换行的功能还没写  如果需要全部源码的请留言或者发邮件至hen  版本  主要代码如下  usingSystem;usingSystemCollectionsG

知识大全 C# 对称算法,加密解密类

C#对称算法,加密解密类  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  模块编号 &n

知识大全 用python和C++解决这个问题

用python和C++解决这个问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!lishixinz

知识大全 利用C#制作简单的留言板

利用C#制作简单的留言板  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  留言板分三个模块列出留言

知识大全 Perl 与 Python 之间的一些异同整理

Perl与Python之间的一些异同整理  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关于Perl

知识大全 用python实现面向对像的ASP程序

用python实现面向对像的ASP程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  平时我们写

知识大全 如何在Python环境下连接Oracle数据库

如何在Python环境下连接Oracle数据库  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  首

知识大全 借助Oracle数据库实现Python数据持久性

借助Oracle数据库实现Python数据持久性  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 Python如何改变列表内元素取值(使用回圈或list comprehension)

Python如何改变列表内元素取值(使用回圈或listcomprehension)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内