zoukankan      html  css  js  c++  java
  • Python-模块的使用

    基础概念

      - 模块是Python组织代码的基本方式
      - 一个Python脚本可以单独运行,也可以导入到另一个脚本中运行,当脚本被导入运行时,我们将其称为模块(module)
      - 所有的.py文件都可以作为一个模块导入
     
     

    特点

      - 模块名与脚本的文件名相同
        例如写一个hello.py的脚本,则可以在另一个脚本中用import hello语句来导入它
      - Python的模块可以按目录组织为包
        创建1个包的步骤:
          - 创建一个名字为包名的目录
          - 在该目录下创建一个__init__.py文件
          - 根据需要,在该目录下存放脚本文件或已编译的扩展及子包
          - import pack.m1,pack.m2,pack.m3
     

    扩展

      - Python内置模块的位置存放在(sys.path环境变量中,类似shell中的PATH)
        主要的模块安装在/usr/lib64/python 2.x/下(python-libs包安装的)
      - 自定义Python的模块path
        1、导入sys包,利用append把路径加入path中
          sys.path.append('/tmp')
        2、修改系统变量
          vim ~/.bashrc
          export PYTHONPATH=/tmp
     

    例子

        写一个类似wc命令的脚本
    #!/usr/bin/env python
     
    def PrintInfo(content):
      chars = len(content)
      words = len(content.split())
      lines = len(content.split('
    '))
      print chars,words,lines
     
    string = open('/etc/passwd').read()
    PrintInfo(string)
    与wc命令对比后发现多了一行,原因是,我们统计行的时候用 作为分隔符,虽然是三行,三个 ,那么用 分割后,就为4行了。
    改进版:
    #!/usr/bin/env python
     
    def PrintInfo(content):
      chars = len(content)
      words = len(content.split())
      lines = content.count('
    ')
      print chars,words,lines
     
    string = open('/etc/passwd').read()
    PrintInfo(string)

    这里只需要对 出现的次数做统计即可。

     

    脚本调用

    cat 2.py
    #!/usr/bin/env python

    import wc
        那么执行2.py就可以去调用wc.py(当前目录下,没有的话才会去PYTHONPATH中查找),调用完毕后会生成wc.pyc文件,方便下次调用,注意模块名和变量名定义规则相同,不能以数字开头
        如果要调用wc中的PrintInfo模块来处理字符
    cat 2.py
    #!/usr/bin/env python
     
    import wc
     
    s = '''hello world
    you are superman
    are you are
    '''
     
    wc.PrintInfo(s)
        问题:这样的话,在执行2.py的时候,它也会去执行wc.py,那么同时会去输出wc.py的信息,为了避免这种情况,这里引入python内置变量__name__
    则修改后的wc.py为:
    #!/usr/bin/env python
     
    def PrintInfo(content):
      chars = len(content)
      words = len(content.split())
      lines = content.count('
    ')
      print chars,words,lines
     
    if __name__ == '__main__':
      string = open('/etc/passwd').read()
      PrintInfo(string)

        注意:__name__是python内置的函数,作用是返回此脚本的执行状态,直接执行此脚本,则__name__返回的是__main__,如果通过其他模块调用,那么返回的是模块名称,所以这里做个判断,如果是调用则不输出原脚本的内容,如果是直接执行此脚本则输出后面的语句。

     

    打包

        包是一些按目录组织的模块的集合
        在要打包的目录下创建__init__.py文件,这个文件可以是空的(也可以是包的描述),那么包的名字就是目录的名称,使用的话:from day4 import wc 或者 import day4.wc
        如果只是导入函数,那么使用 from day4.wc import PrintInfo
        在导入的时候还可以给包/函数起个别名 import day4.wc as Test
        注意:导入包的时候,默认它会在当前目录下或者在PYTHONPATH中寻找
  • 相关阅读:
    hdu 3996
    poj 3189
    poj 2391
    zoj 3165
    【Visual Studio】
    httpwebrequest Winform 上传图片
    [MVC] win7 下 配置 IIS 问题
    win7 下 升级 vs2008
    [Visual Studio 2010] NET 4.0 WinForm无法引用System.Web.dll的解决方法
    [XML] XML
  • 原文地址:https://www.cnblogs.com/dachenzi/p/6095731.html
Copyright © 2011-2022 走看看