zoukankan      html  css  js  c++  java
  • 模块和包

    导入模块

    import语句

    import module1
    import module2
    .
    .
    import moduleN
    #也可以在一行导入多个模块:
    import module1,module2...moduleN #但是这样的代码可读性不如多行的导入语句。而且在性能上与上面没有什么不同,推荐使用上面的格式

    推荐所有的模块导入都在代码的开头部分进行,而且最好按照这样的顺序:

    • Python标准库模块
    • Python第三方模块
    • 应用程序自定义模块

    from-import语句

    可以导入指定的模块属性,也就是把指定名称导入到当前作用域:

    from module import name1,name2...nameN

    扩展的import语句(as)

    有时候导入的模块或模块属性名称已经在你的程序中使用了,或者你不想使用导入的名字,可以使用as关键字对模块或变量进行重命名:

    import time as tm
    #time.time() 原方法
    #tm.timg() 重命名后使用方法
    
    from time import sleep as sp
    #sleep() 原方法
    #sp() 重命名后使用方法

    模块导入的特性

    载入时执行模块

    加载模块会导致这个模块被“执行”。也就是被导入模块的顶层代码将直接被执行。通常这包括全局变量及类和函数的声明。如果有检查__name__的操作,那么它也会被执行。

    导入(import)和加载(load)

    一个模块只被加载一次,无论它被导入多少次。这可以阻止多重导入时代码被多次执行。例如你的导入了sys模块,而你要导入的其他5个模块也导入了它,那么每次都加载sys不是明智之举!所以,加载只在第一次导入时发生。

    导入到当前名称空间的名称

    调用from-import可以把名字导入挡墙的名称空间里去,这意味着你不需要使用属性/句点属性标识来访问模块的标识符。例如,你需要访问模块module中的var名字时这样被导入的:

    from module import var
    #我们使用单个的var就可以访问它自身。把var导入到名称空间后就再没必要引用模块了。
    
    #也可以把指定模块的所有名称都导入到当前名称空间
    from module import *
    
    #在实际工作中应限制使用 from module import * ,因为它会“污染”当前名字空间,而且很可能覆盖当前名称空间中现有的名字。

    包是一个有层次的文件目录结构,它定义了一个由模块和子包组成的Python应用程序执行环境。

    • 为平坦的名称空间加入有层次的组织架构;
    • 允许程序员把有联系的模块组合到一起;
    • 允许分发者使用目录结构而不是一大堆混乱的文件;
    • 帮助解决有冲突的模块名称。

    与类和模块相同,包也使用句点属性标识来访问他们的元素。使用标准的import和from-import语句导入包中的模块。

    目录结构

    Phone/    #Phone是最顶层的包
        __init__.py
        common_utll.py
        Voiccedta/    #是Phone的子包
            __init__.py
            pots.py
            Isdn.py
        Fax/
            __init__.py
            G3.py
        Mobile/
            __init__.py
            Analog.py
            Digital.py    
        Pager/
            __init__.py
            Numeric.py 
    
    #我们可以这样导入子包:
    import Phone.Mobile.Analog
    Phone.Mobile.Analog.dial()
    #也可以使用from-import实现不同需求的导入。 from Phone import Mobile #只导入顶层的子包,然后使用属性/点操作符向下引用子包树 Mobile.Analog.dial() from Phone.Mobile import Analog #引用更多的子包 Analog.dial() #事实上可以一直沿子包的树状结构导入: from Phone.Mobile.Analog import dial dial()
  • 相关阅读:
    基于51单片机PWM调速数码管显示测速L298芯片控制直流电机正反运转的项目工程
    基于51单片机通过点击移位按键移位修改LCD1602字符型液晶显示器显示时分秒个位十位数值的计时项目工程
    基于51单片机DS18B20测温LCD1602显示可设时设温调时的项目工程
    基于51单片机定时器0计时外部中断0计数的霍尔传感器精确测速数码管显示测速的项目工程
    基于51单片机定时器0(或定时器1)工作方式2产生周期为1s方波的项目工程
    基于51单片机增加减少键控制PWM(脉冲宽度调制)来调整LED亮灭程度
    PID解释与离散化算法公式
    利用XPT2046芯片转换电位器模拟值为数码管显示数值的项目工程
    Glide生命周期原理
    一文了解 Consistent Hash
  • 原文地址:https://www.cnblogs.com/NeroCl/p/8284223.html
Copyright © 2011-2022 走看看