设为首页 收藏本站
查看: 804|回复: 0

[经验分享] 深入Python模块的使用

[复制链接]

尚未签到

发表于 2015-11-30 09:54:37 | 显示全部楼层 |阅读模式
1. 模块的导入
  import file_name可以导入当前目录上file_name.py这个模块,但是里面的内容,必须通过file_name.func/file_name.var 来访问。
  另外一种导入方式为import func/var from file_name。这样func/var直接可用,但是file_name是没有定义的。
  从file_name中导入所有:import * from file_name。这样会导入所有除了以下划线开头的命名。实际代码中这样做往往是不被鼓励的。
  如果你一直在某个环境,比如解释器下面,你已经导入过某个模块 ,现在你对模块进行了修改,这里你需要用reload(modulename)来重新载入。
  模块中的主函数:
  

if __name__ == "__main__":  import sys
  fib(int(sys.argv[1]))
  

2. 模块的搜索路径
  首先会搜索解析器的当前目录。然后会到sys.path变量中给出的目录列表中查找。
  

>>> import sys  
>>> sys.path
  
['', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages']
  


  • 输入脚 本的目录(当前目录)  

  • 环境变量PYTHONPATH表示的目录列表中搜索  

  • Ptyon的默认安装路径中搜索。
3. 内置模块
  dir()函数返回模块内的所有定义,无参数时,dir()返回当前解释器中定义的命名。
  

>>> import fibo  
>>> dir(fibo)
  
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'fib', 'fib2']
  
>>> dir()
  
['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'fibo']
  

  dir()并不会列出内置函数和变量名。如果你想列出这些内容,它们在标准模块__builtin__中定义。

4. 包
  当不同作的模块进行按文件夹分类后再组成一个整体的库,可以称为包。
  

sound/                          Top-level package  __init__.py               Initialize the sound package
  formats/                  Subpackage for file format conversions
  __init__.py
  wavread.py
  wavwrite.py
  aiffread.py
  aiffwrite.py
  auread.py
  auwrite.py
  ...
  effects/                  Subpackage for sound effects
  __init__.py
  echo.py
  surround.py
  reverse.py
  ...
  filters/                  Subpackage for filters
  __init__.py
  equalizer.py
  vocoder.py
  karaoke.py
  ...
  

  为了让Python将目录当做内容包,目录中必须包含__init__.py文件。最简单的情况下,只需要一个空的__init__.py文件即可。
  包有两种导入模块或模块内函数的/变量的方式:
  

from package import item  # 这种方式,item可以是包中的一个子模块或子包,也可以是包中定义的其他命名,像函数、类、变量。  
import item.subitem.subsubitem # 这些子项必须是包,最后的子项是包或模块。但不能为函数、类或变量。
  

5. 从 * 导入包
  那么当用户写下 from sound.Effects import * 时会发生什么事?理想中,总是希望在文件系统中找出包中所有的子模块,然后导入它们。这可能会花掉委有长时间,并且出现期待之外的边界效应,导出了希望只能显式导入的包。
  对于包的作者来说唯一的解决方案就是给提供一个明确的包索引。import 语句按如下条件进行转换:执行 from package import *时,如果包中的__init__.py 代码定义了一个名为 __all__ 的列表,就会按照列表中给出的模块名进行导入。新版本的包发布时作者可以任意更新这个列表。如果包作者不想 import * 的时候导入他们的包中所有模块,那么也可能会决定不支持它( import * )。例如, sounds/effects/__init__.py 这个文件可能包括如下代码:
  

__all__ = ["echo", "surround", "reverse"]  

  这意味着 from Sound.Effects import * 语句会从 sound 包中导入以上三个已命名的子模块。
  如果没有定义 __all__ , from Sound.Effects import * 语句 不会 从 sound.effects 包中导入所有的子模块。无论包中定义多少命名,只能确定的是导入了 sound.effects 包(可能会运行__init__.py 中的初始化代码)以及包中定义的所有命名会随之导入。这样就从__init__.py 中导入了每一个命名(以及明确导入的子模块)。同样也包括了前述的 import 语句从包中明确导入的子模块,考虑以下代码:
  

import sound.effects.echo  
import sound.effects.surround
  
from sound.effects import *
  

  在这个例子中,echo 和 surround 模块导入了当前的命名空间,这是因为执行 from...import 语句时它们已经定义在 sound.effects 包中了(定义了 __all__时也会同样工作)。
  尽管某些模块设计为使用 import * 时它只导出符全某种模式的命名,仍然不建议在生产代码中使用这种写法。
  记住,from Package import specific_submodule 没有错误!事实上,除非导入的模块需要使用其它包中的同名子模块,否则这是推荐的写法。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-145219-1-1.html 上篇帖子: python ghost.py使用笔记 下篇帖子: Python命名空间和作用域窥探
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表