zoukankan      html  css  js  c++  java
  • 模块初识

    模块初识

    1. 储存着很多常用功能的py文件就是一个模块.模块就是一系列常用功能的集合体

    2. 为什么要使用模块?

      • 组织结构更清晰,方便管理,易维护
      • 拿来主义,节省代码,大大提升开发效率
    3. py文件两种功能:

      • 执行代码(承载代码),俗称脚本
      • 模块(被引用,被执行)
    4. 模块的分类

      • 内置模块,也叫标准库,此类模块就是python 解释器提供的,time,os等200多种

      • 第三方模块,第三方库,各种python大神写的非常好用的模块,必须通过pip install指令安装的模块,比如Django等,大概有6000多个

      • 自定义模块,我们自己定义的一些模块

        # 示例
        # haha.py
        name = '刘德华'
        lst = [1, 2, 3]
        def fucn():
           print('haha模块', name)
        def change():
           global name
           name = '张学友'
        def lst_append():
            lst.append(4)
        # 这个haha.py文件就是一个模块
        
    5. 引用模块的方法

      1. import使用:import 模块名

        • 引用模块会做三件事:
          1. 创建一个以模块名命名的名称空间,类似全局名称空间(这里保存的是变量与值的对应关系)
          2. 执行这个名称空间(即导入的模块)里面的代码,将其加载到内存.(如果多次导入,则只有第一次会执行代码)
          3. 通过此模块名.的方式引用模块里面的内容(变量 函数名 类名等).这个名字和变量名没有区别,都是'第一类的'.并且模块中定义的名字来自两个完全不同的地方
        • 被导入的模块有独立的名称空间
          • 每个模块都是一个独立的名称空间,定义在这个模块中的函数,把这个模块的名称空间当做全局名称空间,这样我们在编写自己的模块时,就不用担心我们定义在自己模块中的全局变量会在被导入时,与使用者的全局变量冲突.

            # 示例
            # 当前是 hello.py
            import haha
            name = '刘亦菲'
            print(name) # 刘亦菲
            print(haha.name) # 刘德华
            
          • 为导入的模块起个别名

            # 方便书写
            # 简化代码,可以用于统一接口
            # 当前是 hello.py
            import haha as wow # as后面是想改的名字
            print(wow.name) # 刘德华
            
          • 引入多个模块

            • 推荐多行逐个导入: 易于阅读 易于编辑 易于搜索 易于维护
      2. from ... import ... 使用: from 模块名 import 变量名

        • from ... import ...引入时,也会开辟一个以模块名命名的名称空间,但是会把我们想要引入的具体内容(类如变量)的对应关系复制到当前执行文件的全局名称空间中. 注意: 因为复制的是对应关系,所以比较像浅拷贝.

          # 例一
          name = '刘亦菲'
          from haha import name
          print(name) # 刘德华
          
          # 例二
          from haha import name  # 把模块空间内name的对应关系复制了过来.
          from haha import change # 修改模块空间内的name,但是name是不可变的数据类型,直接改变了指向.
          print(name) # 刘德华
          -----------------------------------------------
          # 例三
          from haha import lst # 把模块空间内lst的对应关系复制了过来
          from haha import lst_append # 修改模块空间内的lst,执行文件全局空间中的lst与模块空间内的lst指向同一个内存地址
          print(lst) # [1, 2, 3, 4]
          
        • 引用模块中的函数,如果此函数用到了一些变量,这些变量还是从此模块空间中寻找

        • 优点: 使用起来方便了(不用模块名. ,而是直接使用)

        • 缺点: 容易与当前执行文件产生覆盖效果,相当于变量的重新赋值

  • 相关阅读:
    JavaWeb学习总结(五十)——文件上传和下载
    JavaWeb学习总结(四十九)——简单模拟Sping MVC
    JavaWeb学习总结(四十八)——模拟Servlet3.0使用注解的方式配置Servlet
    javaweb学习总结(四十七)——监听器(Listener)在开发中的应用
    javaweb学习总结(四十六)——Filter(过滤器)常见应用
    javaweb学习总结(四十五)——监听器(Listener)学习二
    javaweb学习总结(四十四)——监听器(Listener)学习
    javaweb学习总结(四十三)——Filter高级开发
    javaweb学习总结(四十二)——Filter(过滤器)学习
    javaweb学习总结(四十一)——Apache的DBUtils框架学习
  • 原文地址:https://www.cnblogs.com/maqian/p/11905260.html
Copyright © 2011-2022 走看看