Python入门学习笔记之Python模块
Python模块:
一、认识Python模块
1.什么是模块
函数是可以实现一项或多项功能的一段程序。我们的模块是函数功能的扩展,模块是可以实现一项或多项功能的程序块。从定义可以看出:函数是一段程序,模块是一项程序块,也就是说函数,模块都是用来实现功能的,但是模块范围要广,在模块里可以重用多个函数
2.如何导入模块
在Python程序中如果要使用某个模块,不能直接使用某个模块的功能。在模块使用之前,我们需要先导入指定模块,只要导入模块后我们才能使用
>>> import math >>> math.pi 3.141592653589793 >>>
3.sys系统自带模块
在Python中有一些模块是不用我们去定义的,Python官方提供的自带的模块。这些模块伴随这Python的安装而产生,我们把这些模块叫做标准库模块。标准库模块是一类模块,而不是一种模块,在标准库模块中,也有非常多的模块,有的模块和电子邮件相关,有的和操作系统相关,还有的和系统功能相关,我们把标准库中和系统相关的这些模块称为sys模块
#实例:
>>> import sys >>> sys.version ‘2.7.10 (default, May 23 2015, 09:44:00) [MSC v.1500 64 bit (AMD64)]‘ >>> sys.executable ‘D:\\Python27\\Python279\\pythonw.exe‘#当前运行文件的位置 >>> sys.getwindowsversion() sys.getwindowsversion(major=6, minor=1, build=7601, platform=2, service_pack=‘Service Pack
1‘)#返回当前windows系统信息
>>> sys.modules.keys()#查看已经导入的模块关键字
二、字节编译
1.何为Python的.pyc文件
我们所说的.pyc文件是以.pyc为后缀名的这一类文件。我们知道,由于我们计算机只认识二进制的机器语言,所以我们在执行Python模块的时候,有两种执行方式:一种是将模块的内容编译成二进制语言,然后执行这些二进制语言,另一种是执行对应模块里面的二进制语言程序。第二种方式省略了编译这一步,所以执行速度相对来说要快一些。而把模块编译成二进制语言程序的这个过程叫做字节编译,这个过程会产生一个与编译的模块对应的.pyc文件,所以说.pyc文件就是经过编译后的模块对应的二进制文件
2.字节编译和编译的区别
字节编译:把模块编译成二进制语言程序的这个过程
Python是一种解释型语言,not编译型语言,所以有人会说怎么来的字节编译,其实Python中虽然出现了编译这个过程,但是它和其他的编译型语言不同的是,它的编译是由解释器完成的,毕竟每个程序想要执行都需要变成二进制的形式,编译型语言是指软件中有一个独立的编译模块去将程序编译,而Python没有,它有解释器
3..pyc文件的产生
字节编译过程中会产生一个与编译的模块对应的.pyc文件,即.pyc文件就是经过编译后模块对应的二进制文件。
有两种.pyc产生的方式:
第一种:import
>>> import zipfile >>>
第二种:CMD命令行
通过输入:cd: d:\Python27\Lib进入到lib文件行,然后输入:python -m compileall xmllib.py
4..pyc文件的使用
在Python中,.pyc文件最大的一个作用就是加快了模块的运行速度(可以直接运行.pyc文件,不需要编译)。其实.pyc还有反编译等高级功能
反编译:把二进制文件还原成源文件
三、From...import详解
1.Python中阴道一个模块的方法就是使用import,但是import只是导入了这个模块,而并没有导入我们模块的某个属性和方法,而我们不仅要导入一个模块,还要导入模块中对应的一个功能,我们可以使用From...import语句
#实例:
>>> import sys >>> sys.version ‘2.7.10 (default, May 23 2015, 09:44:00) [MSC v.1500 64 bit (AMD64)]‘ >>> version Traceback (most recent call last): File "<pyshell#4>", line 1, in <module> version NameError: name ‘version‘ is not defined >>> from sys import version >>> version
‘2.7.10 (default, May 23 2015, 09:44:00) [MSC v.1500 64 bit (AMD64)]‘
>>> #直接调用version,没有出现错误
2.使用from...import*
在Python中是用from...import语句只能导入一个模块的一个功能,如果我们要把这个模块的所有功能,也就是所有属性和方法都到如的话,我们可以使用from...import*语句。
#实例:
>>> executable Traceback (most recent call last): File "<pyshell#9>", line 1, in <module> executable NameError: name ‘executable‘ is not defined >>> #executable是sys的另外一个功能,用于查看当前目录 >>> from sys import * >>> executable ‘D:\\Python27\\Python279\\pythonw.exe‘
四、认识__name__属性
1.认识主模块
在Python函数中,如果一个函数调用其他函数完成一项功能,我们称这个函数为主函数,如果一个函数没有调用其他函数,我们称这种函数为非主函数。模块也是类似的,如果一个模块被直接使用,而没有被别人调用,我们称之为主模块,如果一个模块被别人调用,我们称之为非主模块
2.认识_name_属性
#首先我们分别看一下这个模块在不同场景中的__name__的值
print __name__
#输出结果:
_main_#主模块
区分是否主模块,就看自己调用还是被别人调用
3.__name__属性的使用
在Python中有主模块和非主模块之分,那么如何区分主模块和非主模块呢,如果一个模块的_name_属性值是_main_,那么说明这个模块是主模块,反之不是,其实我们可以把_name_看作一个变量,这个变量由sye系统给出,用于判断一个模块是否是主模块
#实例
#其次我们看一下__name__属性的常用情况,用来判断是不是自己执行,还是被调用
#‘*‘coding=utf-8‘*‘ #用来防止编码错误 if __name__=="__main__":#两个下划线 print "It‘s main" else: print "It‘s not main" #输出结果: >>> import lname_ It‘s not main >>>
五、自定义模块
1.何为自定义模块
Python中有许多模块,有的模块是不需要用户自己去定义的去编写的,Python在安装的时候就自带的模块,这些模块是系统自带模块。而有一些模块刚好跟这种模块不同,它是需要我们自己去定义去编写的模块,称之为自定义模块
2.自定义模块使用详解
(1).只要将自己编写的Python程序(.py)保存到Lib目录下就可以了
(2).编写代码
Ctrl+s保存然后保存到Lib就可以了
#实例:
创建程序,定义函数:
def add(i,j): k=i+j return k k=add(i,j) print k
难点:参数传递,把参数传递到i,j
在函数之前加入初始化值:
i=0 j=0 def add(i,j): k=i+j return k k=add(i,j) print k
这样语法和逻辑就不会出现错误
Crtl+s
然后开始传递参数:
>>> import add 0 >>> i=6 >>> j=7 >>> add.add (i,j) 13 >>>
或者在函数前先进行声明后再保存:
int i in j def add(i,j): k=i+j return k k=add(i,j) print k
#输出结果:
>>> import add >>> i=6 >>> j=7 >>> add.add (i,j) 13 >>>
六、dir函数
1.认识dir()函数
Python中有非常多的模块,但是有时候我们会忘记一个模块有哪些功能,这时候,我们可以通过dir()函数来查看下指定模块的功能列表
#查看sys模块:
>
>> import sys #先导入 >>> dir(sys) #再查看 [‘__displayhook__‘, ‘__doc__‘, ‘__excepthook__‘, ‘__name__‘, ‘__package__‘, ‘__stderr__‘, ‘__stdin__‘, ‘__stdout__‘, ‘_clear_type_cache‘, ‘_current_frames‘, ‘_getframe‘, ‘_mercurial‘, ‘api_version‘, ‘argv‘, ‘builtin_module_names‘, ‘byteorder‘, ‘call_tracing‘, ‘callstats‘, ‘copyright‘, ‘displayhook‘, ‘dllhandle‘, ‘dont_write_bytecode‘, ‘exc_clear‘, ‘exc_info‘, ‘exc_traceback‘, ‘exc_type‘, ‘exc_value‘, ‘excepthook‘, ‘exec_prefix‘, ‘executable‘, ‘exit‘, ‘flags‘, ‘float_info‘, ‘float_repr_style‘, ‘getcheckinterval‘, ‘getdefaultencoding‘, ‘getfilesystemencoding‘, ‘getprofile‘, ‘getrecursionlimit‘, ‘getrefcount‘, ‘getsizeof‘, ‘gettrace‘, ‘getwindowsversion‘, ‘hexversion‘, ‘long_info‘, ‘maxint‘, ‘maxsize‘, ‘maxunicode‘, ‘meta_path‘, ‘modules‘, ‘path‘, ‘path_hooks‘, ‘path_importer_cache‘, ‘platform‘, ‘prefix‘, ‘py3kwarning‘, ‘setcheckinterval‘, ‘setprofile‘, ‘setrecursionlimit‘, ‘settrace‘, ‘stderr‘, ‘stdin‘, ‘stdout‘, ‘subversion‘, ‘version‘, ‘version_info‘, ‘warnoptions‘, ‘winver‘] >>> sys.__doc__#可以进行查看
2.dir函数扩展详解
#实例:
>>> d=[] >>> dir(d) [‘__add__‘, ‘__class__‘, ‘__contains__‘, ‘__delattr__‘, ‘__delitem__‘, ‘__delslice__‘, ‘__doc__‘, ‘__eq__‘, ‘__format__‘, ‘__ge__‘, ‘__getattribute__‘, ‘__getitem__‘, ‘__getslice__‘, ‘__gt__‘, ‘__hash__‘, ‘__iadd__‘, ‘__imul__‘, ‘__init__‘, ‘__iter__‘, ‘__le__‘, ‘__len__‘, ‘__lt__‘, ‘__mul__‘, ‘__ne__‘, ‘__new__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__reversed__‘, ‘__rmul__‘, ‘__setattr__‘, ‘__setitem__‘, ‘__setslice__‘, ‘__sizeof__‘, ‘__str__‘, ‘__subclasshook__‘, ‘append‘, ‘count‘, ‘extend‘, ‘index‘, ‘insert‘, ‘pop‘, ‘remove‘, ‘reverse‘, ‘sort‘] >>> c=[‘a‘,‘b‘] >>> dir(c) [‘__add__‘, ‘__class__‘, ‘__contains__‘, ‘__delattr__‘, ‘__delitem__‘, ‘__delslice__‘, ‘__doc__‘, ‘__eq__‘, ‘__format__‘, ‘__ge__‘, ‘__getattribute__‘, ‘__getitem__‘, ‘__getslice__‘, ‘__gt__‘, ‘__hash__‘, ‘__iadd__‘, ‘__imul__‘, ‘__init__‘, ‘__iter__‘, ‘__le__‘, ‘__len__‘, ‘__lt__‘, ‘__mul__‘, ‘__ne__‘, ‘__new__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__reversed__‘, ‘__rmul__‘, ‘__setattr__‘, ‘__setitem__‘, ‘__setslice__‘, ‘__sizeof__‘, ‘__str__‘, ‘__subclasshook__‘, ‘append‘, ‘count‘, ‘extend‘, ‘index‘, ‘insert‘, ‘pop‘, ‘remove‘, ‘reverse‘, ‘sort‘] >>> #返回值一样,dir返回的只有属性,不区分数据 >>> e=() >>> dir(e) [‘__add__‘, ‘__class__‘, ‘__contains__‘, ‘__delattr__‘, ‘__doc__‘, ‘__eq__‘, ‘__format__‘, ‘__ge__‘, ‘__getattribute__‘, ‘__getitem__‘, ‘__getnewargs__‘, ‘__getslice__‘, ‘__gt__‘, ‘__hash__‘, ‘__init__‘, ‘__iter__‘, ‘__le__‘, ‘__len__‘, ‘__lt__‘, ‘__mul__‘, ‘__ne__‘, ‘__new__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__rmul__‘, ‘__setattr__‘, ‘__sizeof__‘, ‘__str__‘, ‘__subclasshook__‘, ‘count‘, ‘index‘] >>>
本文出自 “8626774” 博客,请务必保留此出处http://8636774.blog.51cto.com/8626774/1677733
原文地址:http://8636774.blog.51cto.com/8626774/1677733