• Python Day27


     

    1、模块:

    模块的定义
    
      模块就是一个py文件  调用一个模块的时候会自动运行这个模块
    
    注意:     一个模块不会被导入多次
              不要在同一行 导入多个模块
     导入顺序    内置模块---第三方模块---自定义模块
     模块的 命名空间 --- 有单独的命名空间
    
       导入模块的时候 会创建一个模块的命名空间
      把里面的名字都绑定到自己的命名空间
    重命名 可以 import my_module as mm 给模块重命名
    
     json -- pickle 操作都一样--可以把名字
     mysql---oracle ---sql
     只导入指定的方法  from .. import ..as .. 只导入指定的方法
    
       多个导入  from my_module import (read1 as read,
                                         read2 as read2,
                                          money as m)
     from... import *   ---- 不用加模块名 模块中的名字不要和文件里的冲突
     print(dir()) # 查看自己导入的模块
     import math ---- from math import pi (节省)---- from math import math
     模块里面 导入的模块 可以被使用  ---  一次导入 后便倒入的模块中也可以 使用这个模块
     *  --   __all__=[]  约束 *
      import sys ----  print(sys.modules) --当前引入的所有模块
      模块第一次导入的时候 已经放在内存里
     第一次导入
              import my_module 时 生成 pyc 编译文件 字节码
              第一次导入的时候 耗时间
              python -m my_module.py  强行生成pyc
     sys.path---找模块路径---丛路径找模块
         sys.modules --当前引入的所有模块
      __name__ ---  __main__  只在自己作为脚本的时候执行
                                  用做脚本测试时  if __name__=='__main__'
    
        def login():       print('ads')
    
        if __name__=='__main__':       login()
     dir(模块) --- 把模块的名字全部显示出来

    2、包:

    模块的定义
    
      模块就是一个py文件  调用一个模块的时候会自动运行这个模块
    
    注意:     一个模块不会被导入多次
              不要在同一行 导入多个模块
     导入顺序    内置模块---第三方模块---自定义模块
     模块的 命名空间 --- 有单独的命名空间
    
       导入模块的时候 会创建一个模块的命名空间
      把里面的名字都绑定到自己的命名空间
    重命名 可以 import my_module as mm 给模块重命名
    
     json -- pickle 操作都一样--可以把名字
     mysql---oracle ---sql
     只导入指定的方法  from .. import ..as .. 只导入指定的方法
    
       多个导入  from my_module import (read1 as read,
                                         read2 as read2,
                                          money as m)
     from... import *   ---- 不用加模块名 模块中的名字不要和文件里的冲突
     print(dir()) # 查看自己导入的模块
     import math ---- from math import pi (节省)---- from math import math
     模块里面 导入的模块 可以被使用  ---  一次导入 后便倒入的模块中也可以 使用这个模块
     *  --   __all__=[]  约束 *
      import sys ----  print(sys.modules) --当前引入的所有模块
      模块第一次导入的时候 已经放在内存里
     第一次导入
              import my_module 时 生成 pyc 编译文件 字节码
              第一次导入的时候 耗时间
              python -m my_module.py  强行生成pyc
     sys.path---找模块路径---丛路径找模块
         sys.modules --当前引入的所有模块
      __name__ ---  __main__  只在自己作为脚本的时候执行
                                  用做脚本测试时  if __name__=='__main__'
    
        def login():       print('ads')
    
        if __name__=='__main__':       login()
     dir(模块) --- 把模块的名字全部显示出来

    包是一种管理 Python 模块命名空间的形式,采用"点模块名称"。

    比如一个模块的名称是 A.B, 那么他表示一个包 A中的子模块 B 。

    就好像使用模块的时候,你不用担心不同模块之间的全局变量相互影响一样,采用点模块名称这种形式也不用担心不同库之间的模块重名的情况。

    这样不同的作者都可以提供 NumPy 模块,或者是 Python 图形库。

    不妨假设你想设计一套统一处理声音文件和数据的模块(或者称之为一个"包")。

    现存很多种不同的音频文件格式(基本上都是通过后缀名区分的,例如: .wav,:file:.aiff,:file:.au,),所以你需要有一组不断增加的模块,用来在不同的格式之间转换。

    并且针对这些音频数据,还有很多不同的操作(比如混音,添加回声,增加均衡器功能,创建人造立体声效果),所你还需要一组怎么也写不完的模块来处理这些操作。

    这里给出了一种可能的包结构(在分层的文件系统中):

    sound/                          顶层包
          __init__.py               初始化 sound 包
          formats/                  文件格式转换子包
                  __init__.py
                  wavread.py
                  wavwrite.py
                  aiffread.py
                  aiffwrite.py
                  auread.py
                  auwrite.py
                  ...
          effects/                  声音效果子包
                  __init__.py
                  echo.py
                  surround.py
                  reverse.py
                  ...
          filters/                  filters 子包
                  __init__.py
                  equalizer.py
                  vocoder.py
                  karaoke.py
                  ...

    从一个包中导入*

    设想一下,如果我们使用 from sound.effects import *会发生什么?

    Python 会进入文件系统,找到这个包里面所有的子模块,一个一个的把它们都导入进来。

    但是很不幸,这个方法在 Windows平台上工作的就不是非常好,因为Windows是一个大小写不区分的系统。

    在这类平台上,没有人敢担保一个叫做 ECHO.py 的文件导入为模块 echo 还是 Echo 甚至 ECHO。

    (例如,Windows 95就很讨厌的把每一个文件的首字母大写显示)而且 DOS 的 8+3 命名规则对长模块名称的处理会把问题搞得更纠结。

    为了解决这个问题,只能烦劳包作者提供一个精确的包的索引了。

    导入语句遵循如下规则:如果包定义文件 __init__.py 存在一个叫做 __all__ 的列表变量,那么在使用 from package import * 的时候就把这个列表中的所有名字作为包内容导入。

     

    作为包的作者,可别忘了在更新包之后保证 __all__ 也更新了啊。你说我就不这么做,我就不使用导入*这种用法,好吧,没问题,谁让你是老板呢。这里有一个例子,在:file:sounds/effects/__init__.py中包含如下代码:

    __all__ = ["echo", "surround", "reverse"]

    这表示当你使用from sound.effects import *这种用法时,你只会导入包里面这三个子模块。

    如果 __all__ 真的没有定义,那么使用from sound.effects import *这种语法的时候,就不会导入包 sound.effects 里的任何子模块。他只是把包sound.effects和它里面定义的所有内容导入进来(可能运行__init__.py里定义的初始化代码)。

    这会把 __init__.py 里面定义的所有名字导入进来。并且他不会破坏掉我们在这句话之前导入的所有明确指定的模块。看下这部分代码:

    import sound.effects.echo
    import sound.effects.surround
    from sound.effects import *
  • 相关阅读:
    使用java Graphics 绘图工具生成顺丰快递电子面单
    NPM使用命令总结
    MYSQL主从库同步配置过程
    Redis的事务功能详解
    MapReduce 原理与 Python 实践
    Django权限机制的实现
    Python调用外部程序——os.system()和subprocess.call
    oracle11g安装教程(注意事项及图文教程)
    顶级的JavaScript框架、库、工具及其使用
    经典CSS坑:如何完美实现垂直水平居中?
  • 原文地址:https://www.cnblogs.com/liuduo/p/7570690.html
Copyright © 2020-2023  润新知