zoukankan      html  css  js  c++  java
  • python | 模块与第三方库的安装

     

    1 模块

    1.1 模块的定义

    在编程语言中,代码块 >> 函数 >> 类 >> 模块 >> 包(库),是逐级封装,层层调用的关系。在Python中,一个.py文件就是一个模块,模块是比类更高一级的封装。

    • 代码块:小至一行代码,大到一个模块,一个函数……都是代码块,此处指一行代码
    • 函数:函数是指封装好、能复用,用来实现单一特定功能的代码块
    • 类:类是数据类型概念的发展,用来描述相似对象的共性,对象所属的数据类型就是“类”
    • 模块:一个.py文件就是一个模块,包含定义好的函数和变量。分为自定义模块、内置模块和第三方模块
    • 包:包是以目录形式存在的模块集合,类似于包含__init__.py文件的文件夹,它包含__init__.py文件、子包及多个模块。包是比模块高一级的封装
    • 库:具有相关功能包的集合。分为标准库、第三方库以及自定义模块

    特别说明:模块、包、库三者其实都是模块,只不过是个体和集合的区别,是对模块的不同组织方式。库和包的关系,类似于类与对象,库是抽象的,包是具体的。

     
    自定义模块就是你自己编写的模块,如果你在网上发布自己的模块并允许他人使用,那么就变成了第三方模块,内置模块是python安装包自带的模块。使用模块的好处又很多,比如:

    • 可维护性:提高了代码的可维护性
    • 可复用性:编写代码不必从零开始。当一个模块编写完毕,就可以被其他的模块引用,不用重复造轮子
    • 可区分性:使用模块还可以避免类名、函数名和变量名发生冲突。相同名字的类、函数和变量完全可以分别存在不同的模块中。但是也要注意尽量不要与内置函数名(类名)冲突

     

    1.2 模块的导入

    假设已经定义好一个模块module_a,它包含add1函数,则导入方法如下。

     

    1.2.1 import 导入

    语法 示例 函数调用
    import 模块1 [,模块2,...] import module_a module_a.add1()
    import ... as ... import module_a as md md.add1()

     

    1.2.2 from import 导入

    语法 示例 函数调用
    from ... import 函数1 [,函数2,...] from module_a improt add1 add1()
    from ... import ... as ... from module_a improt add1 as ad ad()
    from ... import * from numpy import * add1()

    模块的导入,具体哪种方法更好没有统一规定,只要根据自己使用习惯,注意导入时别发生命名冲突即可。

     

    2 程序入口

    如C、C++等语言都有一个main函数作为程序的入口,main去调用函数库,函数库之间不能相互调用(如下图A和B之间),即程序的运行是从main函数开始。而python是脚本语言,没有统一入口,函数库之间可以互相调用。

    所以,python代码执行有两种情况:

    • 情况1:直接作为脚本执行,即直接运行该模块
    • 情况2:先import到其他python模块中再调用执行(模块重用),其实就是「第三方库」。

    而python通过if__name__ == 'main' : 语句,控制这两种不同情况下的代码执行。

     

    2.1 模拟入口

    基于python代码执行机理,可用if__name__ == 'main' : 语句模拟程序入口,实现对python代码执行的控制。

    • 以脚本直接执行时,if__name__ == 'main': 后面语句会执行(该语句多为函数正确性验证语句)
    • 被import到其他模块中执行时,if__name__ == 'main': 后面语句不会执行
    # 直接作为脚本执行
    def add1(x):
        x = x+2
        return x
    add1(10)
    
    # 模块重用执行
    import os
    os.chdir('D:\data\python_file') 
    from addx import add1
    add1(9)
    

    所以,想运行以脚本直接执行时才执行的命令时,可以将这些命令语句放在if__name__ == 'main': 判断语句之后:

    # 自定义一个函数add1
    def add1(a):
        a=a+1
        return a
    print(__name__)
    
    if __name__ == "__main__":       # 脚本直接执行时,运行后面的语句;被import执行时,不运行后面的语句
        print(add1(2))               # 函数正确性验证和测试
    

     

    3 库

    库是具有相关功能包(模块)的集合。分为标准库、第三方库以及自定义模块。下面着重介绍python第三方库的安装

     

    3.1 pip安装

    在安装好Anconda后,打开Anconda Prompt,用以下指令就可以进行安装、卸载、查看等操作。

    语法 描述
    pip install … 安装
    pip uninstall … 卸载
    pip download … 下载
    pip list 查看安装列表

     

    3.2 文件安装

    若遇到pip安装失败,可考虑使用文件安装,具体操作步骤如下:

    • 打开网页,找到正确的待安装库(注意windows位数和库版本号)

    • 左击文件下载待安装库

    • 管理员身份运行Anaconda Prompt,输入pip install 安装库文件的路径 + 安装库的名称,最后回车运行。如:C:UsersAdministratorakima-2019.1.1-cp34-cp34m-win32.whl

     
    文件下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/ ,网站包含很多Windows环境下可直接安装的第三方库文件。如:akima-2019.1.1-cp34-cp34m-win32.whl,akima是库名称;2019.1.1是库版本号;cp34指python版本号

     

    3.3 自定义安装

    安装第三方库提供的安装方式和步骤进行,优先级最低。

    安装好后,在python的代码或交互环境里导入相应库,如import numpy,看看有无报错即可判断是否安装成功。

  • 相关阅读:
    PHP数组(数组正则表达式、数组、预定义数组)
    面向对象。OOP三大特征:封装,继承,多态。 这个讲的是【封存】
    uvalive 3938 "Ray, Pass me the dishes!" 线段树 区间合并
    LA4329 Ping pong 树状数组
    HDU 1257 最少拦截系统
    HDU 1260 Tickets
    codeforce 621D
    codeforce 621C Wet Shark and Flowers
    codeforce 621B Wet Shark and Bishops
    codeforce 621A Wet Shark and Odd and Even
  • 原文地址:https://www.cnblogs.com/1k-yang/p/12597529.html
Copyright © 2011-2022 走看看