zoukankan      html  css  js  c++  java
  • Python基础-15模块-包-库

    15.模块-包-库

    15.1 基本概念

        随着代码量的不断增多,一个文件里代码会越来越长,也不容易维护。为了解决这种问题,我们会进行拆分,并将具备类似的功能放同一文件中。这样每个文件包含的代码就相对较少。在Python中一个.py文件就称之为一个模块,英文叫(module)

        使用模块的好处如下所示:

    • 1.提高了代码的可维护性
    • 2.提高了代码的可复用性,当一个模块编写完成之后,可以被其他地方引用。
    • 3.使用模块还可以避免函数名称、变量名和类名等命名冲突。相同名字的函数、变量名、类名等可以放在不同的模块中,但要避免与内置函数名冲突

        模块虽然解决了函数名、变量名和类名等命名冲突,那模块之前也会存在命名冲突的情况,应该怎么解决?为解决这个模块命名冲突,Python引入了按目录来组织模块的方法,称为包,英文(package)

        举个例子,现在有两个py文件,分别为surpassA.py和surpassB.py,则相应的模块名即为surpassA和surpassB。如果这两个模块名与其他模块名存在冲突,则可以包来组织模块,使其成为包。方法是选择一个顶层包名,如surpass,按以下形式进行存放

    surpass
      |—— __init__.py
      |—— surpassA.py
      |—— surpassB.py
    

        在引入包之后,只要顶层的包名没有冲突,则可以确保模块名不会产生冲突。则相应的模块名也由原来的模块名变更为surpass.surpassA和surpass.surpassB。

    1.包的注意事项:每个包目录中必须存在__init__.py文件,否则Python会将视为普通目录,而非一个包。
    2.__init__.py文件内容可以为空,也可以有相应的代码,其本身也是一个模块

        类似这种情况,在一个包里面也是可以存在多个目录,组成多层级的包,示例如下所示:

    surpass
      |—— __init__.py
      |—— surpassA.py
      |—— surpassB.py
      |—— config
      |    |—— __init__.py
      |    |—— surpassC.py
      |    |—— surpassD.py
      |—— web
           |—— __init__.py
           |—— surpassE.py
           |—— surpassF.py
    

        以示例对应的模块名分别如下所示:

    • surpassC:surpass.config.surpassC
    • surpassA:surpass.surpassA

        在Python中库是具有相关功能模块的集合,英文(library)。可分为以下三种形式:

    • 标准库:Python内置库
    • 自定义库:自己所写
    • 第三方库:由他人所写或开源分享出来的

        第三方库的安装,一般使用pip安装,其形式如下所示:

    pip/pip3 install -U 库名
    

    15.2 导入模块

        Python自身内置了很多模块,只要安装完成后,即可以正常调用。导入模块的常见形式如下所示:

    import 模块名
    import 模块名 as 别名 # 在模块名称特别长的时候,可以简化调用所输入的模块名
    import 模块名A,模块名B,模块名C,
    from 模块名 import 函数名/类名 # 导入指定模块中的函数或类
    from 模块名 import * # 导入指定模块中的所有内容,但排除以下划线开头的变量、函数等
    

        引入某一特定路径下的模块,可使用sys.path.append(模块名),示例如下所示:

    import sys
    # 表示将上一层路径添加到sys.path中,在添加之后,解释器会搜索当前模块所在目录以及sys.path指定的路径去找需要import的模块
    sys.path.append("..")
    

        导入模块需要遵循的规则如下所示:

    • 1.内置的模块优先导入并靠前
    • 2.导入模块时,尽量少用from from 模块名 import *
    • 3.不要重复导入同一模块,Python针对多次导入的模块,也仅执行一次

    15.3 示例代码

    person.py

    class Person:
    
        def __init__(self,name,age):
            self._name=name
            self._age=age
    
        def getPerInfo(self):
            print(f"name is {self._name},age is {self._age}")
    

    mulClass.py

    
    class Student:
    
        def __init__(self, name, age,classNo):
            self._name = name
            self._age = age
            self._classNo=classNo
    
        def getPerInfo(self):
            print(f"name is {self._name},age is {self._age},class NO. is {self._classNo}")
    
    class Worker:
    
        def __init__(self,name,occupation):
            self._name=name
            self._occupation=occupation
    
        def getWorkerInfo(self):
            print(f"name is {self._name},he/she is {self._occupation}")
    
    class Teacher():
    
        def __init__(self,name,classNO):
            self._name=name
            self._classNo=classNO
    
        def getClassNo(self):
            print(f"teacher's name is {self._name},His/Her's class is {self._classNo}")
    
    
    def testFunc(name):
        print(f"Hello, {name}")
    

    main.py

    import person
    from mulClass import Student
    from mulClass import testFunc
    
    if __name__ == '__main__':
        person=person.Person("Surpass",28)
        person.getPersonInfo()
        student=Student("Surpass",18,"Class-1")
        student.getStudentInfo()
        testFunc("testFunc")
    

    输出结果如下所示:

    name is Surpass,age is 28
    name is Surpass,age is 18,class NO. is Class-1
    Hello, testFunc
    

    本文地址:https://www.cnblogs.com/surpassme/p/13020585.html
    本文同步在微信订阅号上发布,如各位小伙伴们喜欢我的文章,也可以关注我的微信订阅号:woaitest,或扫描下面的二维码添加关注:
    MyQRCode.jpg

  • 相关阅读:
    JDBC操作数据库的步骤 ?
    switch 是否能作用在 byte 上,是否能作用在 long 上, 是否能作用在 String 上?
    有哪些不同类型的IOC(依赖注入)方式?
    ApplicationContext通常的实现是什么?
    如何给Spring 容器提供配置元数据?
    一个”.java”源文件中是否可以包含多个类(不是内部类)? 有什么限制?
    数据库连接(Database link)?
    你怎样定义类的作用域?
    JSP的常用指令有哪些?
    Mapper 编写有哪几种方式?
  • 原文地址:https://www.cnblogs.com/surpassme/p/13020585.html
Copyright © 2011-2022 走看看