zoukankan      html  css  js  c++  java
  • Python 中模块及其导入方式

    模块

    模块的概念:模块就是一组功能的集合体,我们的程序可以导入模块来复用模块里的功能。

    模块的定义:创建一个 py 文件就是一个模块,该 py 文件名就是模块名。

    模块的使用:在要使用模块的文件中,通过 import 模块名 来导入模块。

    模块的通用类别:

    1 使用python编写的.py文件
    2 已被编译为共享库或DLL的C或C++扩展
    3 把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包)
    4 使用C编写并链接到python解释器的内置模块
    

    import module 导入模块后对应的操作:

    1. 编译执行模块所对应的 py 文件,形成对应的 pyc 文件
    2. 产生该模块自己的全局名称空间
    3. 在使用该模块的全局名称空间中产生一个名字(导入的模块名)

    导入模块是要注意点:
    1.每一个文件都会产生自己的全局名称空间,且相互不影响
    2.多次导入,只会编译执行模块一次,将其加载到内存,之后的都是直接对名字的引用

    使用模块的优点:
    1.从文件级别组织代码,是同特性的功能能统一管理
    2.可以使用系统或第三方模块(拿来主义),来提高开发效率

    起别名

    通过as关键字可以给模块起别名: 模块名一旦起别名,原模块名就不能再使用,为已经导入的模块起别名的方式对编写可扩展的代码很有用。

    优点:

    1.可以简化模块名字
    2.可以统一功能

    # 1.可以简化模块名字
    import mmmmm3 as my_m3
    print(my_m3.num)
    # 2.可以统一功能
    cmd = input('数据库选择 1:mysql | 2:oracle:')
    if cmd == '1':
        import mysql as db
        # mysql.excuse()
    else:
        import oracle as db
        # oracle.excuse()
    db.excuse()
    

    假设有两个模块xmlreader.py和csvreader.py,它们都定义了函数read_data(filename):用来从文件中读取一些数据,但采用不同的输入格式。可以编写代码来选择性地挑选读取模块

    if file_format == 'xml':
        import xmlreader as reader
    elif file_format == 'csv':
        import csvreader as reader
    data=reader.read_date(filename)
    

    from导入

    from 模块名 import 名字1, 名字2, …, 名字n
    利用from导入可以指名道姓导入模板中所有想导入的名字。

    使用from导入与import导入的区别:
    使用from…import…则是将spam中的名字直接导入到当前的名称空间中,所以在当前名称空间中,直接使用名字就可以了、无需加前缀:spam.

    from...import...的方式有好处也有坏处
      	好处:使用起来方便了
        坏处:容易与当前执行文件中的名字冲突
    
    from  模块名 import *
    导入的是模块中的__all__这个列表
    1、系统默认该列表不会收录_开头的名字
    2、可以自定义__all__列表来规定外界通过*可以导入的名字
    

    大部分情况下我们的python程序不应该使用这种导入方式,因为*你不知道你导入什么名字,很有可能会覆盖掉你之前已经定义的名字。而且可读性极其的差。

    例如模块中有变量名 a
    from  模块名 import *
    # 可以使用模块中的a
    a = 20
    # 模块中的a就被覆盖了,且在代码上还不能直接看出
    

    利用from导入时起别名

    from 模板名 import 名字1 as 别名1, ..., 名字n as 别名n
    

    自执行与模块区别

    编写好的一个python文件可以有两种用途:
    一:脚本,一个文件就是整个程序,用来被执行
    二:模块,文件中存放着一堆功能,用来被导入使用

    python为我们内置了全局变量__ name __ ,
    当文件被当做脚本执行时:__ name __ 等于’__ main __ ’
    当文件被当做模块导入时:__ name __等于模块名

    作用:用来控制.py文件在不同的应用场景下执行不同的逻辑
    if __ name __ == ‘__ main __’:

    __name__:
    1.在py文件作为模块被使用时,__name__为模块名
    2.在py文件自执行时,__name__为字符串 '__main__'
    
    
    print("共有逻辑")
    if __name__ == '__main__':
        # 所有自执行的逻辑
        print("m6: 我是自执行的")
        a = 10  # 产生的是全局的名字
    else:
        # 所有模块的逻辑
        print("m6: 我被导入执行的")
        print(a)  # 会报错:走else就不可能走if,所以a压根没产生
    
  • 相关阅读:
    后序非递归遍历二叉树的应用
    关于驰骋工作流程引擎,工作流程管理系统演示与学习环境发布的通知。
    驰骋工作流程引擎,ccflow,如何把子线程的数据汇总到合流节点表单中去?
    关于取消ccflow abc 级别用户与开放表单设计器源代码的通知
    驰骋工作流程引擎问题解答,武汉朋友。
    ccform 单据打印的规则调整与新增功能发布说明
    发几个傻瓜表单设计器预览图片,以方便大家学习.
    关于工作流程管理系统中的现有版本自由表单设计器的停止升级与新版本将要发布的声明.
    ccflow向流程开始节点表单传输数据方法大全
    利用开源的驰骋工作流程引擎,处理的集团公司流程应用案例之一.
  • 原文地址:https://www.cnblogs.com/linwow/p/10693785.html
Copyright © 2011-2022 走看看