• 【Python专题】使用模块


    注:本系列内容系廖雪峰老师Python教程的学习笔记
    本文主要内容包括以下三个内容:

    Python中的模块

    • Python内置了很多有用的模块,这些模块在你安装Python后即可使用。

      示例:使用Python自带sys模块,编写一个hello模块

      
      #!/usr/bin/env python3
      
      
      # -*- coding:utf-8 -*-
      
      
      'a test module'
      
      __author__='Fanyu'
      
      import sys
      
      def test():
        args=sys.argv
        if len(args)==1:
             print('Hello,World!')
        if len(args)==2:
            print('Hello,%s!' % args[1])
        else:
            print('Too many arguments!')
      
      if __name__=='__main__':
        test()            

      我们对上面的代码做出解释:第一行和第二行是标准注释,第一行注释可以让这个名为hello.py的文件直接在Unix/Linux/Mac上直接运行,第二行注释表示.py文件本身使用UTF-8编码。第四行是模块的文档注释,任何模块代码的第一个字符串都被视为模块的文档注释。第六行使用__author__变量把作者的信息加入。这些信息都属于额外的信息,可以删掉不写。后面开始就是模块的主要内容。

      使用一个模块的第一步,就是导入该模块,如:

      import sys

      sys模块有一个argv变量,用list储存了命令行的所有参数。argv中至少有一个元素,因为第一个元素即是.py文件的名称。

      我们来运行上面的代码,在命令行输入python hello.py

      C:UsersfanyuDesktopPYTHON>python hello.py
      Hello,World!
      C:UsersfanyuDesktopPYTHON>python hello.py Hello
      Hello,Hello!

      可见,在没有任何参数的情况下,其执行了args==1的情况,也就是说此时有一个参数hello.py,在加了一个Hello参数的情况下,程序执行了args==2的情况。

      现在我们来看最后一行的if语句,这条语句表示,在命令行执行该模块时,Python解释器会把__name属性赋值为__main__,而在其他地方导入hello模块时则if语句会判断失败,即:不执行test()函数。这种if测试可以让一个模块通过命令行运行时执行一些额外的代码。,最常见的即是运行测试。

      我们来看效果:

      1.首先在命令行执行如下命令

      C:UsersfanyuDesktopPYTHON>python hello.py
      Hello,World!

      2.然后启动Python交互环境导入hello模块

      C:UsersfanyuDesktopPYTHON>python
      Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)] on win32
      Type "help", "copyright", "credits" or "license" for more information.
      >>> import hello
      >>>

      可见,导入时没有打印任何信息,也就是说hello模块没有执行test()函数,要调用才会执行test()

      >>> hello.test()
      Hello,World!

    作用域

    • 在一个模块中,我们可能会定义很多函数和变量,有的函数和变量我们希望提供给别人使用,但有的我们仅希望在模块内部供自己使用。Python通过_前缀来实现该功能。
      • 正常的函数名和变量是公开的(public),可以被直接引用,比如:abc,x123,PI等。
      • 类似_author_ ,_name这样的变量是特殊变量,可以被直接引用,但有特殊用途。
      • 类似_xxx,__xxx这样的函数或者变量是非公开的(private),不应该被直接引用。

    安装第三方模块

    • 在Python中,安装第三方模块通过包管理工具pip完成。

    • 安装pip:在命令行运行pip,若打印信息提示找不到命令,那么你需要安装,反之不用。安装pip起始很简单,在当初安装python的时候就会默认安装,如果你发现你的没有,那么进行以下操作:

      1.重新安装python并确保在安装时勾选了pip选项

      2.安装好之后确保配置了python环境变量。

      当安装并确保pip命令可行之后,让我们来安装一个第三方库,一般来说,第三方库都会在Python官方的Python第三方库网站注册,当知道库的名称后,你就可以进行安装。首先进入上面的网站,选择或者搜索你想要安装的库,这里我们以Python下强大的Python Imaging Library–Pillow库为例,来进行安装,在命令行输入:

      pip install Pillow

      此时系统就会开始下载,等待系统下载并安装完成,然后,我们来进行测试。

    • 示例:图片生成缩略图

      >>> from PIL import Image
      >>> im=Image.open('test.jpg')
      >>> print(im.format,im.size,im.mode)
      JPEG (660, 439) RGB
      >>> im.thumbnail((200,100))
      >>> im.save('thumb.jpb','JPEG')

      找一张你喜欢的图片试试吧!
      其他常用的第三方库还有MySQL的驱动:mysql-connector-python,用于科学计算的Numpy库:numpy,用于生成文本的模板工具Jinja2等等。

    • 其他常用的第三方库还有MySQL的驱动:mysql-connector-python,用于科学计算的Numpy库:numpy,用于生成文本的模板工具Jinja2等等。

    • 模块搜索路径
      当我们试图加载一个模块时,Python会在指定的路径下搜索对应的.py文件,如果找不到就会报错。默认情况下Python解释器会搜索当前目录,所有已安装的内置模块和第三方模块,搜索路径存放在sys模块的path变量中:

    >>> import sys
      >>> sys.path
      ['', 'C:\Users\fanyu\AppData\Local\Programs\Python\Python36\python36.zip', 'C:\Users\fanyu\AppData\Local\Programs\Python\Python36\DLLs', 'C:\Users\fanyu\AppData\Local\Programs\Python\Python36\lib', 'C:\Users\fanyu\AppData\Local\Programs\Python\Python36', 'C:\Users\fanyu\AppData\Local\Programs\Python\Python36\lib\site-packages']

    如果要添加自己的搜索路径,有两种方式:

    1.直接修改sys.path

    >>> import sys
      >>> sys.path.append('your path')
      >>> sys.path
      ['', 'C:\Users\fanyu\AppData\Local\Programs\Python\Python36\python36.zip', 'C:\Users\fanyu\AppData\Local\Programs\Python\Python36\DLLs', 'C:\Users\fanyu\AppData\Local\Programs\Python\Python36\lib', 'C:\Users\fanyu\AppData\Local\Programs\Python\Python36', 'C:\Users\fanyu\AppData\Local\Programs\Python\Python36\lib\site-packages', '', 'your path']
    

    这种方法的特点是添加简便,但是只在本次运行时有效。

    2.设置环境变量PYTHONPATH,将你要添加的路径添加到上述环境变量中,python就会将其添加到sys.path中,且始终有效。

  • 相关阅读:
    关于this关键字
    Java元注解
    缩点+spfa最长路【bzoj】 1179: [Apio2009]Atm
    使用Windows API进行串口编程
    串口编程基础知识
    设计模式--代理模式
    用Java实现断点续传的基本思路和代码
    断点续传的原理
    JAVA的StringBuffer类
    StringBuilder用法
  • 原文地址:https://www.cnblogs.com/yczha/p/13160283.html
Copyright © 2020-2023  润新知