python基础 模块

模块
模块又称为库; 分为:标准库、第三方库;标准库:python自带,不需安装直接调用(比如os、sys等) 第三方库:别人写的功能,需要安装才能调用
模块的形式:一个python文件;
模块名就是文件名去掉.py后缀。
一般自己装的放在sites_package中,系统自带放在lib文件

内建函数dir()可以查看模块定义了什么名字(包括变量名,模块名,函数名等):dir(模块名),没有参数时返回所有当前定义的名字

默然情况下python导入文件或者模块的话,他会先在sys.path里找模块的路径。如果没有的话,程序就会报错。    sys.path返回的结果包括:当前python文件所在的目录、python的环境变量

一般,site-packages文件夹放安装的第三方库;Lib文件夹放标准库。

通常包总是一个目录,可以使用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
 
包是一个包含__init__.py 文件的目录,该目录下一定得有这个__init__.py文件和其它模块或子包。
 
库的概念是具有相关功能模块的集合。这也是Python的一大特色之一,即具有强大的标准库、第三方库以及自定义模块;
它是抽象概念,和包和模块不是一类,只要你喜欢,什么都是 lib,就算只有个 hello world;包可以成为库,包含有多个模块的文件夹也可以成为一个库,

 

总结:
包、模块
1、包:通常包是一个包含__init__.py 文件的目录,一个包中可以包括子包和模块.pywenjian ;可以使用import导入包,或者from + import来导入包中的部分模块

2、模块:在Python可理解为对应于一个.py文件
3、import可以从包中导入单独的模块:
1). import PackageA.SubPackageA.ModuleA,使用时必须用全路径名
2). 变种: from package import item时,item可以是package的子模块或子包, 可以直接使用模块名而不用加上包前缀。
3). 也可以直接导入模块中的函数或变量:from PackageA.SubPackageA.ModuleA import functionA
4). 也可以直接导入包中的所有模块from packet import *;使用这种方式,需要用all,__all__ = ['baidu', 'youdao']列出所有的模块名称
4、__init__.py的主要作用是:
1). Python中package的标识,不能删除
2). 定义__all__用来模糊导入
3). 编写Python代码(不建议在__init__中写python模块,可以在包中在创建另外的模块来写,尽量保证__init__.py简单)
5、模块的执行顺序
当前路径 (以及从当前目录指定的sys.path)

然后是PYTHONPATH

然后是python的安装设置相关的默认路径(python自带的包、模块都在这里)。

  正因为存在这样的顺序,如果当前路径或PYTHONPATH中存在与标准module同样的module,则会覆盖标准module。也就是说,如果当前目录下存在xml.py,那么执行import xml时,导入的是当前目录下的module,而不是系统标准的xml。了解了这些,我们就可以先构建一个package,以普通module的方式导入,就可以直接访问此package中的各个module了。要把模块目录加入到sys.path,可以一、使用sys.path.append()直接修改,运行结束后无效;二,永久修改PYTHONPATH,环境变量的内容会被自动添加到模块搜索路径中;三、把模块加入到python安装路径下或者执行调用文件的目录下(慎用)

并且sys.path.append(xx/../a.py)要放到import a.py之前

6、当调用模块/包的文件,跟模块文件不在一个目录中,需要使用"sys.path.append"添加模块路径到sys.path;sys.path.append这句话需要放到import baidu的前面,才能把目录成功加载到sys.path中


sys.argv返回命令行的参数列表,第一个参数是脚本名称;比如用python test.py arg1 arg2运行test.py代码
那么sys.argv列表的内容是['test.py','arg1','arg2']

sys.path指定用于模块搜索路径的字符串列表;

import sys
print('the command line arguments are:')

for i in sys.argv:
print(i)
print('\n\nthe pythonpath is ',sys.path,'\n')

 

__name__和__main__的作用

只想在程序本身被使用的时候运行主块,而在它被别的模块输入的时候不运行主块
(1)作为脚本自己去运行的话,对应的模块名,就始终叫做__main__,通过判断,的确是__main__,然后会去执行对应的__name__下面的测试代码。
(2)如果被当做一个模块被导入的时候,对应的模块名称就是模块名,就不会执行__name__下面的代码段。


posted @ 2017-10-26 14:32  nianyuxue87  阅读(159)  评论(0编辑  收藏  举报