• Python学习--09 模块


    模块让我们能够有逻辑地组织Python代码段。把相关的代码分配到一个 模块里能让我们的代码更好用,更易懂。

    导入模块

    Python使用import语句导入模块。语法:

    # 形式一:导入模块
    import module1[, module2[,... moduleN]
    ## 示例
    import sys
    
    # 形式二:从模块中导入一个指定的部分到当前命名空间中
    from modname import name1[, name2[, ... nameN]]
    ## 示例
    from fib import fibonacci
    
    # 形式三:把一个模块的所有内容全都导入到当前的命名空间,不建议使用
    from modname import *
    

    示例:

    #!/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()
    

    第1行和第2行:标准注释,第1行注释可以让这个hello.py文件直接在Unix/Linux/Mac上运行,第2行注释表示.py文件本身使用标准UTF-8编码;
    第4行是模块注释;
    第6行是模块作者;
    以上是模块标准模板,当然也可以全部删掉不写,但是建议按标准编写。
    第8行导入sys模块;导入模块后,就可以使用该模块的所有功能了。
    第11行sys.argv表示命令行参数,第一个参数永远是该.py文件的名称。
    第19行需要注意:在命令行里打开啊py文件,Python解释器会把特殊变量__name__置为__main__,而在其他地方导入py文件,则判断不会成立。

    定位模块

    当我们导入一个模块,Python解析器对模块位置的搜索顺序是:

    1. 当前目录
    2. 如果不在当前目录,Python 则搜索在 shell 变量 PYTHONPATH 下的每个目录。
    3. 如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/。
    

    模块搜索路径存储在system模块的sys.path变量中。

    如果我们要添加自己的搜索目录,有两种方法:

    一是直接修改sys.path,添加要搜索的目录:

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

    这种方法是在运行时修改,运行结束后失效。

    第二种方法是设置环境变量PYTHONPATH,该环境变量的内容会被自动添加到模块搜索路径中。设置方式与设置Path环境变量类似。注意只需要添加你自己的搜索路径,Python自己本身的搜索路径不受影响。

    查看模块

    通过dir()函数可以查看指定模块的所有功能:

    import math
    
    print(dir(math))
    

    输出:

    ['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'hypot', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']
    

    在这里,特殊字符串变量__name__指向模块的名字,__file__指向该模块的导入文件名。

    作用域

    在一个模块中,我们可能会定义很多函数和变量,但有的函数和变量我们希望给别人使用,有的函数和变量我们希望仅仅在模块内部使用。在Python中,是通过_前缀来实现的。

    正常的模块都是公开的,可以直接使用,我们称之为public;而以_x或者__x开头的是非公开的,称为private,不应该被直接访问。其中类似__xxx__这样的变量是特殊变量,有着特殊意义,例如__author____name__

    但是Python不会强制我们不能使用private变量,直接访问是可以的,因为Python并没有一种方法可以完全限制访问private函数或变量,但是,从编程习惯上不应该引用private函数或变量。

    def _fun1():
        pass
        
    def _fun2():
        pass
    
    def myfunc(type):
        if(type == 1):
            return _fun1()
        else:
            return _fun2()
    

    作用域总结:外部不需要引用的函数全部定义成private,只有外部需要引用的函数才定义为public。

    编写自己的模块

    Python的模块有一定的目录结构,只要按照约定的格式编写,很容易编写自己的模块。

    python模块组成:

    mymodule
     |-- __init__.py
     |-- x.py
     |-- y.py
     |-- submodule
         |--__init__.py
         |-- x.py
         |-- y.py
    

    Python模块下必须有__init__.py文件,表明这是一个模块;如果有子模块,那么子模块也必须有__init__.py文件。该文件可以为空。

    如果mymodule/__init__.py里有add()方法,外部调用方法:

    import mymodule
    mymodule.add()
    

    如果mymodule/x.py里有add()方法,外部调用方法:

    from mymodule import x
    x.add()
    

    如果mymodule/submodule/__init__.py里有add()方法,外部调用方法:

    import mymodule.submodule
    mymodule.submodule.add()
    

    如果mymodule/submodule/x.py里有add()方法,外部调用方法:

    from mymodule.submodule import x
    x.add()
    

    第三方模块

    Python社区有大量的第三方模块供我们使用。例如网站:https://pypi.python.org/pypi。

    安装pip

    我们一般是通过包管理工具pip安装第三方模块的。在安装Python后,系统一般会带有该工具。安装windows版本的时候注意:如果Windows提示未找到命令,可以重新运行安装程序添加pip。

    下面是Linux版本安装方法
    (1)ubuntu:

    sudo apt-get install python-pip
    

    (2)Fedora、centos:

    yum install python-pip
    

    (3)Linux, Mac OSX, Windows 下都可用 get-pip.py 来安装 pip:https://pip.pypa.io/en/latest/installing.html

    或者直接下载:get-pip.py ,然后运行在终端运行 python get-pip.py 就可以安装 pip。

    Note: 也可以下载 pip 源码包,运行 python setup.py install 进行安装。

    安装好后设置环境变量。windows下是:

    PATH=%PATH%;D:Python34;D:Python34Scripts;
    

    分别是Python和Scripts的所在目录。

    如果提示pip版本过低,通过下面命令更新:

    pip install --upgrade pip
    

    示例

    一般来说,第三方库都会在Python官方的http://pypi.python.org网站注册,要安装一个第三方库,必须先知道该库的名称,可以在官网或者pypi上搜索,比如Pillow的名称叫Pillow,因此,安装Pillow的命令就是:

    $ pip install Pillow
    
    Collecting Pillow
      Downloading Pillow-4.0.0-cp34-cp34m-win32.whl (1.2MB)
    Successfully installed Pillow-4.0.0
    

    耐心等待下载并安装后,就可以使用Pillow了。

    PIL:Python Imaging Library,Python平台图像处理库。PIL功能非常强大,但API却非常简单易用。

    图像缩放:

    # coding: utf-8
    from PIL import Image
    im = Image.open('test.jpg')
    print(im.format, im.size, im.mode)
    im.thumbnail((200, 100))
    im.save('thumb.jpg', 'JPEG')
    

    模糊效果:

    # coding: utf-8
    from PIL import Image,ImageFilter
    im = Image.open('test.jpg')
    im2 = im.filter(ImageFilter.BLUR)
    im2.save('blur.jpg', 'jpeg')
    

    验证码:

    from PIL import Image, ImageDraw, ImageFont, ImageFilter
    
    import random
    
    # 随机字母:
    def rndChar():
        return chr(random.randint(65, 90))
    
    # 随机颜色1:
    def rndColor():
        return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255))
    
    # 随机颜色2:
    def rndColor2():
        return (random.randint(32, 127), random.randint(32, 127), random.randint(32, 127))
    
    # 240 x 60:
    width = 60 * 4
    height = 60
    image = Image.new('RGB', (width, height), (255, 255, 255))
    # 创建Font对象:
    font = ImageFont.truetype('Arial.ttf', 36)
    # 创建Draw对象:
    draw = ImageDraw.Draw(image)
    # 填充每个像素:
    for x in range(width):
        for y in range(height):
            draw.point((x, y), fill=rndColor())
    # 输出文字:
    for t in range(4):
        draw.text((60 * t + 10, 10), rndChar(), font=font, fill=rndColor2())
    # 模糊:
    image = image.filter(ImageFilter.BLUR)
    image.save('code.jpg', 'jpeg')
    

    注意示例里的字体文件必须是绝对路径。

  • 相关阅读:
    1.4redis小结--队列在抢购活动的实现思路
    1.3redis小结--配置php reids拓展
    redis小结 1-2
    redis小结 1-1
    pandas学习小记
    Python简单算法的实现
    python编码
    ThinkPHP中的__initialize()和类的构造函数__construct()
    js正则常用方法
    总结了下PHPExcel官方读取的几个例子
  • 原文地址:https://www.cnblogs.com/52fhy/p/6279430.html
Copyright © 2020-2023  润新知