跳至主要內容

使用模块

yczha大约 5 分钟python基础python语法python

Python基础系列内容为学习廖雪峰老师Python3教程的记录,廖雪峰老师官网地址:廖雪峰Python3教程open in new window

  • 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:\Users\fanyu\Desktop\PYTHON>python hello.py
    Hello,World!
    C:\Users\fanyu\Desktop\PYTHON>python hello.py Hello
    Hello,Hello!
    

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

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

    我们来看效果:

    • 首先在命令行执行如下命令

      C:\Users\fanyu\Desktop\PYTHON>python hello.py
      Hello,World!
      
    • 然后启动Python交互环境导入hello模块

      C:\Users\fanyu\Desktop\PYTHON>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的时候就会默认安装,如果你发现你的没有,那么进行以下操作:

    • 重新安装python并确保在安装时勾选了pip选项
    • 安装好之后确保配置了python环境变量。

    当安装并确保pip命令可行之后,让我们来安装一个第三方库,一般来说,第三方库都会在Python官方的Python第三方库open in new window网站注册,当知道库的名称后,你就可以进行安装。首先进入上面的网站,选择或者搜索你想要安装的库,这里我们以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等等。

  • 模块搜索路径

    当我们试图加载一个模块时,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']
    

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

    • 直接修改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']
      

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

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