python 模块

来源:互联网 发布:网络拨号图标不见了 编辑:程序博客网 时间:2024/05/20 20:03
六:模块: 
            把很多函数分组 分别放到不同的文件里 这样每个文件的代码相对较少 在Python中一个.py文件就称之为一个模块(Module):提高可维护性,避免命名冲突。
            abc.py模块名为abc 引入包的概念。每个包目录下面都必须有一个__init__.py,否则就只是普通目录
        1:模块化的编程
#!/usr/bin/env python
# -*-coding:utf-8 -*-
                              #前两行是标准注释 第一行可以让这个文件直接在Unix Like 上运行 第二行表示已urf-8编码
' a test module'                                 #模块的文档注释 任何模块代码的第一个字符串都被视为模块的文档注释
__author__='lc'                                #作者名
import sys                                      #导入sys 模块 这样就可以访问sys 模块的所有的功能
def test():
 args=sys.argv                               #sys模块的argv变量 用list 存储了命令行的所有参数 argv至少有一个参数 第一个参数 是这个.py文件的文件名
                                                     #例如运行 python python001.py li sys.argv 就是['python001.py','li']
 if len(args)==1:
  print 'Hello,World!'
 elif len(args)==2:
  print 'Hello,%s!' %args[1]
 else:
  print 'To many arguments'
if __name__=='__main__':          #当我们在命令行运行这个模块文件的时候 python解释器一个特殊变量__name__置为__main__
                                                   #而如果在其他地方运行则不会 因此if测试可以让一个模块通过命令行运行的时候执行一些额外的代码
         #最基本的就是运行测试
 test()
 #使用命令行运行 python python001.py ->Hello,World python python001.py licheng ->Hello,licheng
 #如果启动交互式导入 >>>import >>> 就不会执行操作 >>>hello.test() Hello,World!
         
#!/usr/bin/env python# -*-coding:utf-8 -*-#前两行是标准注释 第一行可以让这个文件直接在Unix Like 上运行 第二行表示已urf-8编码' a test module'#模块的文档注释 任何模块代码的第一个字符串都被视为模块的文档注释__author__='lc'#作者名import sys#导入sys 模块 这样就可以访问sys 模块的所有的功能def test():args=sys.argv#sys模块的argv变量 用list 存储了命令行的所有参数 argv至少有一个参数  第一个参数 是这个.py文件的文件名#例如运行 python python001.py li  sys.argv 就是['python001.py','li']if len(args)==1:print 'Hello,World!'elif len(args)==2:print 'Hello,%s!' %args[1]else:print 'To many arguments'if __name__=='__main__':  #当我们在命令行运行这个模块文件的时候 python解释器一个特殊变量__name__置为__main__   #而如果在其他地方运行则不会 因此if测试可以让一个模块通过命令行运行的时候执行一些额外的代码   #最基本的就是运行测试test()#使用命令行运行  python python001.py ->Hello,World  python python001.py licheng ->Hello,licheng#如果启动交互式导入 >>>import >>>  就不会执行操作 >>>hello.test()  Hello,World!


         2 别名
                导入模块的时候  还可以使用别名。
                try:
                    import cStringIO as StringIO
                except ImportError  #导入失败 被捕捉
                    import StringIO 
                这样就是 不论有没有cStringIO 这个模块 使用StringIO 这个名称都不会发生错误
            
        3: 作用域
                    在一个模块中 一些变量或者函数是否可以被模块外访问是通过 _  前缀实现的
                    正常的函数和变量名是公开的(public ) 例如 abc ,PI 等等
                    __xxx__ 是特殊变量 可以被直接引用 但是有特殊用途
                    _xxx __xxx 这样的函数或者变量是非公开的(private)不应该被直接引用  _abc __abc  但是没有限制  不是不能引用



        4:安装第三方模块
                    先下载ez_setup.py运行 easy_install PIL 就可以安装 Python Imaging Library 这个python 处理图像的工具了
                    >>>import Image
                    >>>im = Image.open('1.jpg')
                    >>>print im.format,im,size,im.mode
                    PNG (1221,2321)    RGB
                    >>>im.thumbnail((123,213))
                    >>>im.save('2.jpg','JPEG')
                    缩略图 讲一个图片变小
                    
                    模块搜索路径:
                        当我们加载引入一个模块的时候 python 会在指定的路径下搜索对应的.py文件 如果找不到就会报错。默认情况下,Python解释器会搜索当前目录,所有已安装的内置模块和第三方模块,搜索路径存放在sys模块的path变量中 
                        >>>import sys
                        >>>sys.path
                        如果想要添加自己的搜索目录有两种方法:
                        1:直接修改sys.path 添加要搜索的目录
                        >>>import sys
                        >>>sys.path.append('/users/zhuyuwaiting/?')
                        这种方法是在运行的时候修改 运行结束之后就失效
                        2:第二种方法就是 设置环境变量 PYTHONPATH 改环境变量会自动的添加到模块的搜索路径中 设置方式与设置python的环境变量的时候一致

        5:使用__future__
                Python的 __future__ 模块 把下一个新版本的特性导入到当前版本 于是我们就可以再当前版本中测试一些新版本的特性。
                适应Python 3.x的新的字符串的表示方法 在2.x中 可以通过unicode_literals 来使用3.x中的特性
                    #still running on Python 2.x
                    
                    from __future__ import unicode_literals
                    print '\'xxx\' is unicode?',isinstance('xxx',unicode)
                    print 'u\'xxx\' is unicode?' ,isinstance(u'xxx',unicode)
                    print '\'xxx\' is str?',isinstance('xxx',str)
                    print 'b\'xxx\' is str?',isinstance(b'xxx',str)
                    
                    'xxx' is unicode? True
                    u'xxx' is unicode?True
                    'xxx' is str ?False
                    b'xxx' is str?True


        4:安装第三方模块
                    先下载ez_setup.py运行 easy_install PIL 就可以安装 Python Imaging Library 这个python 处理图像的工具了
                    >>>import Image
                    >>>im = Image.open('1.jpg')
                    >>>print im.format,im,size,im.mode
                    PNG (1221,2321)    RGB
                    >>>im.thumbnail((123,213))
                    >>>im.save('2.jpg','JPEG')
                    缩略图 讲一个图片变小
                    
                    模块搜索路径:
                        当我们加载引入一个模块的时候 python 会在指定的路径下搜索对应的.py文件 如果找不到就会报错。默认情况下,Python解释器会搜索当前目录,所有已安装的内置模块和第三方模块,搜索路径存放在sys模块的path变量中 
                        >>>import sys
                        >>>sys.path
                        如果想要添加自己的搜索目录有两种方法:
                        1:直接修改sys.path 添加要搜索的目录
                        >>>import sys
                        >>>sys.path.append('/users/zhuyuwaiting/?')
                        这种方法是在运行的时候修改 运行结束之后就失效
                        2:第二种方法就是 设置环境变量 PYTHONPATH 改环境变量会自动的添加到模块的搜索路径中 设置方式与设置python的环境变量的时候一致

        5:使用__future__
                Python的 __future__ 模块 把下一个新版本的特性导入到当前版本 于是我们就可以再当前版本中测试一些新版本的特性。
                适应Python 3.x的新的字符串的表示方法 在2.x中 可以通过unicode_literals 来使用3.x中的特性
                    #still running on Python 2.x
                    
                    from __future__ import unicode_literals
                    print '\'xxx\' is unicode?',isinstance('xxx',unicode)
                    print 'u\'xxx\' is unicode?' ,isinstance(u'xxx',unicode)
                    print '\'xxx\' is str?',isinstance('xxx',str)
                    print 'b\'xxx\' is str?',isinstance(b'xxx',str)
                    
                    'xxx' is unicode? True
                    u'xxx' is unicode?True
                    'xxx' is str ?False
                    b'xxx' is str?True

0 0