zoukankan      html  css  js  c++  java
  • 模块 import 与from

    什么是模块:就是一系列功能的集合体

      模块的来源 :1内置模块   2 第三方模块   3 自定义模块

      模块的格式:

        1 使用python编写的.py文件

        2 已被编译为共享库或DLL的C或C++扩展

        3 把一系列模块组织到一起的文件(注:文件下有一个_init_.py文件,该文件夹称之为包)

        4 使用C编写病链接到python解释器得内置模块

    为何要用模块

      1 使用内置的或者第三方模块的好处是:拿来主义,可以极大提升开发效率

      2 使用自定义模块的好处是:可以减少代码冗余(抽取我们自己程序中要公用的一些功能定义模块,然后程序的各部分组件都去模块中调用共享的功能)

    如何用模块

      大前提:一定要区分开谁是执行文件,谁是被导入模块

    import导入模块

    首次导入模块发生什么事  文件名是spam.py 模块名是spam

      1 会产生一个模块的名称空间

      2 执行文件spam.py将执行过程中产生的名字都有放到模块的名称空间中

      3 在当前执行文件的名称空间中拿到一个模块名,该名字指向模块的名称空间

    import spam

    之后的导入,都是直接引用第一次导入的成果,不会重新执行文件

    在执行文件中访问模块名称空间中名字的语法:模块名.名字(spam.x)  指名道姓的跟spam要名字x 肯定不会与当前执行文件中的名字冲突

     总结import导入模块:在使用时必须加上前缀:模块名

     优点:指名道姓的向某一个名称空间要名字,肯定不会与当前名称空间中的名字冲突

     缺点:但凡应用模块中德名字都需要加前缀,不够简洁

    from 模块 import 模块名导入

    首次导入模块发生3件事 :

      1 创建一个模块的名称空间

      2 执行文件spam.py将指向过程中产生的名字都放到模块的名称空间中

      3 在当前执行文件中拿到一个名字,改名字就是执行模块中相对应的名字

      总结:from、、、improt、、、

      优点:使用时无需再加前缀,更简洁

      缺点:容易与当前名称空间中的名字冲突

    起别名  通过as关键字可以给模块起别名: 模块名一旦起别名,原模块名就不能再使用

    from spam import readl as r1

    r1()

    自执行与模块区别

      

    # __name__:
    # 1.在py文件作为模块被使用时,__name__为模块名
    # 2.在py文件自执行时,__name__为字符串 '__main__'

    print("共有逻辑")
    if __name__ == '__main__':
    # 所有自执行的逻辑
    print("m6: 我是自执行的")
    a = 10 # 产生的是全局的名字
    else:
    # 所有模块的逻辑
    print("m6: 我被导入执行的")
    print(a) # 会报错:走else就不可能走if,所以a压根没产生

  • 相关阅读:
    【LOJ6041】「雅礼集训 2017 Day7」事情的相似度(用LCT维护SAM的parent树)
    【BZOJ1171】大sz的游戏(线段树+单调队列)
    2019年4月训练记录(4.07~4.22)
    【BZOJ4766】文艺计算姬(prufer序列)
    【BZOJ4573】[ZJOI2016] 大森林(LCT)
    2019.03.19 ZJOI2019模拟赛 解题报告
    【牛客挑战赛30D】小A的昆特牌(组合问题抽象到二维平面)
    【洛谷2624】[HNOI2008] 明明的烦恼(Python+利用prufer序列结论求解)
    【洛谷2290】[HNOI2004] 树的计数(Python+利用prufer序列结论求解)
    初识prufer序列
  • 原文地址:https://www.cnblogs.com/lakei/p/10672962.html
Copyright © 2011-2022 走看看