说明:
函数可以将代码的实现细节隐藏起来,而模块则可以在一个py文件中放置多个函数,通过模块的导入,即可调用这多个函数,当然也可以将一个函数作为一个py文件,无论是哪一种方式,这个py文件,都可以称为一个模块。更普遍来说,py文件都可以作为一个模块,通过import导入来进行使用。
这里说的模块应该是类似于sys或者os之类的模块,而不是普通的py文件。可以将多个python包放在一个目录中,通过__init__的初始化方法制作一个python包,import导入之后即可以使用。
因此,这里需要提及的应该是下面的内容:
1.模块的制作与调试方法 2.包的制作 3.常用模块的使用方法
1.模块的制作与调试方法
(1)模块的制作
・模块制作如下:
#!/usr/bin/env python print 'This module is made by xpleaf.' def sayHi(): print "Hello, I'm xpleaf" def Work(work): print "Your work is %s" % work def Salary(money): print 'Your salary is %s' % money
・如果直接执行,则只会显示非函数部分:
xpleaf@xpleaf-machine:/mnt/hgfs/Python/day3$ python my_module1.py This module is made by xpleaf.
(2)模块调试方法
-在交互器中调试
・可以在交互器中导入模块,使用上面的函数功能:
>>> import tab >>> import my_module1 ===>导入模块不用加.py后缀 This module is made by xpleaf. ===>非函数部分会直接执行 >>> my_module1. ===>按tab键会显示该模块下可以执行的方法 my_module1.Salary( my_module1.__name__ my_module1.Work( my_module1.__new__( my_module1.__class__( my_module1.__package__ my_module1.__delattr__( my_module1.__reduce__( my_module1.__dict__ my_module1.__reduce_ex__( my_module1.__doc__ my_module1.__repr__( my_module1.__file__ my_module1.__setattr__( my_module1.__format__( my_module1.__sizeof__( my_module1.__getattribute__( my_module1.__str__( my_module1.__hash__( my_module1.__subclasshook__( my_module1.__init__( my_module1.sayHi( >>> my_module1.sayHi() ===>执行模块中的函数 Hello, I'm xpleaf >>> my_module1.Work('CEO') Your work is CEO >>> my_module1.Work('Student') Your work is Student >>> my_module1.Salary('None') Your salary is None
・也可以只导入该模块中的某个函数:
>>> from my_module1 import sayHi This module is made by xpleaf. >>> sayHi() Hello, I'm xpleaf
-直接在bash中调试
・每次都要进入交互器并且import调试显然有些麻烦;
・可以在模块文件中添加name方法直接在bash中调试;
・上面代码修改如下:
#!/usr/bin/env python print 'This module is made by xpleaf.' def sayHi(): print "Hello, I'm xpleaf" def Work(work): print "Your work is %s" % work def Salary(money): print 'Your salary is %s' % money if __name__ == '__main__': #判断被主动执行还被import导入调用 sayHi() #主动执行时,将会执行该name语句块后面的内容 Work('Student') #import导入调用时,将不会执行该name语句块后面的内容 Salary('None')
・执行结果如下:
a.直接在bash中执行 xpleaf@xpleaf-machine:/mnt/hgfs/Python/day3$ python my_module1.py This module is made by xpleaf. Hello, I'm xpleaf Your work is Student Your salary is None
・在交互器中执行与第一种调试方法是一样的;
2.包的制作
・将多个模块文件打包在一起时,考虑使用包;
・my_packets目录下有下面几个模块:
xpleaf@xpleaf-machine:/mnt/hgfs/Python/day3$ ls my_packets/ caculate.py my_module1.py
・my_dule1.py内容与上面一样,caculate.py代码如下:
#!/usr/bin/env python print 'This modules can help you to do some caculates.' def add(num1,num2): print '%s + %s is:%s' % (num1,num2,num1+num2) def cut(num1,num2): print '%s - %s is:%s' % (num1,num2,num1-num2) def multiply(num1,num2): print '%s * %s is:%s' % (num1,num2,num1*num2) def div(num1,num2): print '%s / %s is:%s' % (num1,num2,num1/num2)
・要想通过import方法就能导入my_packets包,需要在该目录下创建__init__.py文件,并添加相应内容,演示如下:
xpleaf@xpleaf-machine:/mnt/hgfs/Python/day3$ touch my_packets/__init__.py xpleaf@xpleaf-machine:/mnt/hgfs/Python/day3$ vim my_packets/__init__.py __all__ = ['my_module1','caculate'] #使用该包下的模块,需要在这里添加,否则无法使用
・在交互器中演示如下:
>>> import tab >>> from my_packets import * ===>导入my_packets包下的所有模块 This module is made by xpleaf. This modules can help you to do some caculates. >>> caculate. ===>便可以使用caculate模块下的相应函数功能 caculate.__class__( caculate.__reduce__( caculate.__delattr__( caculate.__reduce_ex__( caculate.__dict__ caculate.__repr__( caculate.__doc__ caculate.__setattr__( caculate.__file__ caculate.__sizeof__( caculate.__format__( caculate.__str__( caculate.__getattribute__( caculate.__subclasshook__( caculate.__hash__( caculate.add( caculate.__init__( caculate.cut( caculate.__name__ caculate.div( caculate.__new__( caculate.multiply( caculate.__package__ >>> my_module1. ===>便可以使用my_module1模块下的相应功能 my_module1.Salary( my_module1.__name__ my_module1.Work( my_module1.__new__( my_module1.__class__( my_module1.__package__ my_module1.__delattr__( my_module1.__reduce__( my_module1.__dict__ my_module1.__reduce_ex__( my_module1.__doc__ my_module1.__repr__( my_module1.__file__ my_module1.__setattr__( my_module1.__format__( my_module1.__sizeof__( my_module1.__getattribute__( my_module1.__str__( my_module1.__hash__( my_module1.__subclasshook__( my_module1.__init__( my_module1.sayHi(
3.常用模块的使用方法
・可以参考个人相关文档,这里先不作提及。