Python学习总结(5)-模块和包

来源:互联网 发布:手机绿色上网软件 编辑:程序博客网 时间:2024/06/06 01:32

模块

  • 模块是一个文件,包含可执行语句和函数。
  • 文件名就是模块名加上.py后缀。
  • 使用import导入模块,并且使用modelname.function的方式调用模块中的方法。
  • 模块中的可执行语句在第一次导入时执行。
  • 每个模块都有自己私有符号表,模块内定义的所有函数用其作为全局符号表。因此,模块的作者可以在模块里使用全局变量,而不用担心与某个用户的全局变量有冲突。另一方面,如果你知道自己在做什么,你可以使用引用模块函数的表示法访问模块的全局变量,modname.itemname
  • import可以直接导入模块中的函数,而不会把模块名导入本地符合表中,有点类似Java的静态导入。
# 导入fib, fib2函数from fibo import fib, fib2# 导入模块内所有函数,不包含以`_`开头的函数。from fibo import *
  • 模块的名称可由全局变量__name__得到。
#可以让此文件既可以作为可执行的脚本,也可以当作可以导入的模块,因为解析命令行的那部分代码只有在模块作为 “main” 文件执行时才被调用。#这种方法通常用来为模块提供一个方便的用户接口,或者用来测试(例如直接运行脚本会执行一组测试用例)if __name__ == "__main__":    import sys    fib(int(sys.argv[1]))

模块的执行路径

  • 当导入一个模块时,首先搜索具有该名称的内置模块,如果没有找到就从sys.path目录下查找。sys.path变量初始值来自:
    • 脚本所在目录
    • PYTHONPATH
    • 与安装相关的默认值

  • 包是用来管理模块的。类似于Java的包。
  • 包避免了模块之间的重名。
  • 目录下包含__init__.py文件,才会被当作包

导入

# 从包中导入模块,使用时需加上完整名称import sound.effects.echosound.effects.echo.echofilter()# 同上,使用时不用包前缀from sound.effects import echoecho.echofilter()## 直接导入所需函数或变量from sound.effects.echo import echofilterechofilter()
  • 注意使用from package import item时,item 可以是包的子模块(或子包),也可以是包中定义的一些其它的名称,比如函数、 类或者变量。
  • 使用类似 import item.subitem.subsubitem 这样的语法时,除了最后一项其它每项必须是一个包;最后一项可以是一个模块或一个包,但不能是在前一个项目中定义的类、函数或变量。
  • 推荐写法:from Package import specific_submodule
  • 如果包中的 __init__.py 代码定义了一个名为__all__的列表,那么在遇到 from package import *语句的时候,应该把这个列表中的所有模块名字导入。

包含多个目录的包

包还支持一个特殊的属性, path。在文件运行之前,该变量被初始化为一个包含 init.py 所在目录的列表。这个变量可以修改;这样做会影响未来包中包含的模块和子包的搜索。

虽然通常不需要此功能,它可以用于扩展包中的模块的集合。

0 0
原创粉丝点击