笔记-Python-module

1.      模块

关于模块:

每个模块都有自己的私有符号表,模块中所有的函数以它为全局符号表。因此,模块的作者可以在模块中使用全局变量,而不用担心与用户的全局变量发生意外冲突。另一方面,如果有需要,可以引用某一模块的全局变量,引用方法为modname.itemname。

 

1.1.    模块引用

import module

from module import function1, function2, function3

from [somemodule] import *

使用方法2引用时不会引用被引用模块的名称

方法3相当于方法2的变体,会导入所有的名称(names,自已理解,相当于属性+方法+变量….),除了以_开头的部分;不建议使用此方法,可能会覆盖同名对象(变量,函数等);

import module as <name>

 

1.2.    模块执行

模块也可以执行

python fibo.py <arguments>

注意:

if __name__ == “__main__”:

       pass

不解释

 

1.3.    模块搜索路径

导入一个模块,Python解析器对模块位置的搜索顺序是:

脚本当前目录

shell 变量 PYTHONPATH 下的每个目录。

Python默认路径(依赖于安装环境)。UNIX下,默认路径一般为/usr/local/lib/python/。

 

1.4.    编译模块

为了加速加载模块,Python将每个模块的编译版本缓存在__pycache__名称下的目录中,文件名类似于module.version.pyc; 

Python根据编译后的版本检查源代码的修改日期,看它是否过期并需要重新编译。这是一个完全自动的过程。另外,编译后的模块是独立于平台的,因此可以在不同体系结构的系统之间共享相同的库。

 

1.5.    dir()

The built-in function dir() is used to find out which names a module defines. It returns a sorted list of strings:

dir(builtins)

 

 

2.      package

包是一个目录,可以使用import 导入包,或使用from +import导入包中的部分模块;

包目录第一个文件应该是__init__.py,如果子目录中也有__init__.py,那么它就是这个包的子包了。

引用包

1). import PackageA.SubPackageA.ModuleA,使用时必须用全路径名

2). 变种: from PackageA.SubPackageA import ModuleA, 可以直接使用模块名而不用加上包前缀。

3). 也可以直接导入模块中的函数或变量:from PackageA.SubPackageA.ModuleA import functionA

 

import语句语法:

1. 当使用from package import item时,item可以是package的子模块或子包,或是其他的定义在包中的名字(比如一个函数、类或变量)

   首先检查item是否定义在包中,不过没找到,就认为item是一个模块并尝试加载它,失败时会抛出一个ImportError异常。

2. 当使用import item.subitem.subsubitem语法时,最后一个item之前的item必须是包,最后一个item可以是一个模块或包,但不能是类、函数和变量

 

3. from pacakge import *

   如果包的__init__.py定义了一个名为__all__的列表变量,它包含的模块名字的列表将作为被导入的模块列表。

   如果没有定义__all__, 这条语句不会导入所有的package的子模块,它只保证包package被导入,然后导入定义在包中的所有名字。

 

 

3.      其它

导入模块其实就是告诉Python解释器去解释那个py文件

 

导入一个py文件,解释器解释该py文件

导入一个包,解释器解释该包下的 __init__.py 文件

模块能像包含函数定义一样,可包含一些可执行语句。这些可执行语句通常用来进行模块的初始化工作。这些语句只在模块第一次被导入时被执行。这非常重要,有些人以为这些语句会多次导入多次执行,其实不然。

 

目录下级模块:

import <path>.<module>

也可在下级目录中建立__init__.py文件,然后导入

目录上级模块:

要导入上级目录,把上级目录加到sys.path里:sys.path.append('../')

from fatherdirname import xxx

 

删除模块

del #只在内存中删除,文件并未删除

 

import module1,module2,module3

在用import语句导入模块时最好按照这样的顺序:

1、python 标准库模块

2、python 第三方模块

3、自定义模块

 

 

 

3.1.    模块特殊变量

1. __doc__ 将文档的注释封装到该方法  """这种注释才会被封装"""

2. __file__ 获取模块文件的所在路径

3. __name__

       if __name__ == ‘__main__’:

打开一个.py文件时,经常会在代码的最下面看到if __name__ == '__main__':

模块是对象,并且所有的模块都有一个内置属性 __name__。一个模块的 __name__ 的值取决于如何应用模块。如果 import 一个模块,那么模块__name__ 的值通常为模块文件名,不带路径或者文件扩展名。但是您也可以像一个标准的程序样直接运行模块,在这 种情况下, __name__ 的值将是一个特别缺省"__main__"。

 

4. __cached__

5. __package__指定的函数从哪个模块导入

from bin import admin

print(__package__)

print(admin.__package__)

 

# 结果:

None

bin

 

3.2.    reload

python3中reload被放到了imp模块中

方式(1)

>>> import imp

>>> imp.reload(module)

方式(2)

>>> from imp import reload

>>> reload(module)

注意:使用reload 必须保证module的name已存在于本模块中,也就是说

from module import function后reload会报错;

 

 

日拱一卒无有尽,功不唐捐终入海