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

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

 

脚本调用

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('\n')
  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中寻找
posted @ 2016-11-23 22:28  SpeicalLife  阅读(323)  评论(0编辑  收藏  举报