第五章-模块 1 使用模块 2 私有变量 3 安装第三方模块 4 模块搜索路径

在Python中一个py文件就可以被称为模块(Module)

由于写的模块越来越多, 模块名重复的几率越来越大, Python又引入了按目录来组织文件的方法, 也就是包(Package)

引入了包之后, 模块的名称就变成了 包名.模块名 

Package的目录结构中, 每个目录下要存放一个__init__.py的文件, 否则该目录就会被当成普通目录. __init__.py本身就是一个模块, 模块名就是目录名

1.1 模块其实是一个py文件

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

' a test module '

__author__ = 'Michael Liao'

import sys

def test():
    args = sys.argv
    if len(args)==1:
        print('Hello, world!')
    elif len(args)==2:
        print('Hello, %s!' % args[1])
    else:
        print('Too many arguments!')

if __name__=='__main__':
    test()

  第一行和第二行是标准的python注释

  第四行是一个字符创, 表示模块的文档注释, 任意模块代码的第一个字符串都被视为模块的文档注释, 此内容可以通过__doc__来访问

  第六行的__author__是作者信息

  这就是标准的模板的结构

  第八行表示导入sys模块, 导入之后就可以使用变量sys. sys模块里面有一个参数是argv, 它获取到了命令行的输入, 返回list类型, 第一个元素是文件名, 后面是写入的参数

  第十九行的__name__只有在运行该函数的时候才会赋值为__main__

1.2 导入模块

  导入模块有两种方法

  方法一:

import 模块名字

    这样的导入方法以后使用函数需要

      模块名字.函数名字

  方法二:

from 模块名字 inport 函数名字

    这样就直接导入了某个函数, 使用的时候直接使用函数名就可以了

1.3 导入自己写的模块

  由于模块就是一个py文件, 可以自定义一个文件自己来导入

  其中import的时候会执行一遍模块文件

  如下的test.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

__author__ = 'weihuchao'

def getMax(mList):
    print("getMax")
    return max(mList)

print("hello test")

  如下是导入test模块的代码

import test
maxValue = test.getMax([24,3,26,9,33])
print(maxValue)

  结果为

hello test
getMax
33

2 私有变量

  之前遇见过得__author__等是特殊的变量, 与此类似的还有_变量名的变量, 这种变量表示私有变量, 只能在模块内部使用.

  尽管在Python中没有可以限制不使用私有变量或者私有函数, 但是在编程中尽量不要乱调用别的私有变量和函数

  进一步的编程习惯是:

    在模块中, 不公开的函数和变量全部使用私有变量, 用公开的函数来调用私有的成员.

def _private_1(name):
    return 'Hello, %s' % name

def _private_2(name):
    return 'Hi, %s' % name

def greeting(name):
    if len(name) > 3:
        return _private_1(name)
    else:
        return _private_2(name)

3 安装第三方模块

  在Python中安装第三方的模块是通过包管理工具pip来完成的

  安装图片处理工具Python Imaging Library

pip install Pillow

  生成缩略图

>>> from PIL import Image
>>> im = Image.open('test.png')
>>> print(im.format, im.size, im.mode)
PNG (400, 300) RGB
>>> im.thumbnail((200, 100))
>>> im.save('thumb.jpg', 'JPEG')

  其余还有MYSQL的驱动 mysql-connector-python, 用于科学计算的NumPy库 numpy, 用于生成文本的模板工具Jinja2

4 模块搜索路径

  使用import导入模块的查找的顺序如下:

    当前目录-->所有已安装的内置模块-->第三方模块

  搜索路径在sys的path里

>>> import sys
>>> sys.path

  更改搜索目录的方法有两种

    第一种: 直接修改sys.path

>>> import sys
>>> sys.path.append('/Users/michael/my_py_scripts')

    第二种: 修改环境变量PYTHONPATN