zoukankan      html  css  js  c++  java
  • day 13 模块

    模块

      一个py文件,就是一个模块,一个模块是一些相似功能的集合体。

    # echo.py  定义一个模块。 下文都用这个
    print('from echo 模块')
    name = 'echo'
    def func1():
        print('来自echo模块', 111)
    def func2():
        print('来自echo模块', 222)
        func1()
    def func3():
        global name
        name = 'iris'
        print(name)

    作用:1、减少重复代码,提高开发效率。

       2、使得你的代码的组织结构更清晰,有条理性。

    模块的划分:

      1、内置模块。 time   os     sys

      2、扩展模块(第三方模块)

        这个需要下载安装pip3 ,pip安装的模块,第三方模块

        beautiful soup     request   gevent 等等

        itchat  与微信相关的模块

      3、自定义模块

        自己写的模块

    模块的使用:

      引用模块相当于执行这个模块, 重复导入会直接引用内存中加载好的结果

    import echo   #  pring: from echo 模块
    import echo   # 后续引用不会再打印  from echo 模块
    import echo

    模块被执行发生了三件事:

    1、创建一个以被导入模块的名字命名的名称空间

    2、自动执行模块中的代码(将模块中的所有内容加载至内存)

    3、要想执行模块中的代码,必须通过模块名. 的方式执行获取

    import echo
    print(echo.name)   # echo

    注意:每个模块都是一个独立的名称空间,定义在这个模块中的函数,把这个模块的名称空间当做全局名称空间,这样我们在编写自己的模块时,就不用担心我们定义在自己模块中全局变量会在被导入时,与使用者的全局变量冲突

    name = 'alex'
    import echo
    print(name)       # alex
    print(echo.name)  # echo

    模块改名

      1、模块名过长,引用不方便,给模块改名,简化引用

    import time as t  #  改time为 t

      2、优化代码

    #mysql.py
    def sqlparse():
        print('from mysql sqlparse')
    #oracle.py
    def sqlparse():
        print('from oracle sqlparse')
    
    #test.py
    db_type=input('>>: ')
    if db_type == 'mysql':
        import mysql as db
    elif db_type == 'oracle':
        import oracle as db
    
    db.sqlparse()

    引用多个模块

    # 建议
    import
    time import sys import os # 不建议 import tiem, sys, os

    from ...... import.....

    from echo import  name , read()

      1、执行一遍echo的所有代码,加载到内存

      2、将name,read()实际引用过来的变量函数在本文件复制一份,可以通过globals()查看

      好处:使用简单

      坏处:容易与本文件的变量,函数名等发生冲突

    其他应用:

      起别名:

        from echo import name as n

        prrint(n)

      导入多个:

    from  echo  import name
    from  echo  import read()
    
    # 也可以
    from  echo  import name, read()

      导入所有:

        from  echo import *

        一般不用

        如果使用只有两点:

          1、将导入的模块中的所有的代码全部清除的前提下,可以使用*

          2、只使用一部分

    __all__=['name', 'read1'] #这样在另外一个文件中用from spam import *就这能导入列表中规定的两个名字

    py文件有两个作用:

    1、作为脚本,直接运行

    2、作为模块供其他人使用

    3、__name__ == '__main__'可以作为一个项目的启动文件

    #python为我们内置了全局变量__name__,
        当文件被当做脚本执行时:__name__ 等于'__main__'
        当文件被当做模块导入时:__name__等于模块名
    #作用:用来控制.py文件在不同的应用场景下执行不同的逻辑(或者是在模块文件中测试代码)
        if __name__ == '__main__':
    print('from the tbjx.py')
    
    __all__ = ['name', 'read1',]
    
    name = '太白金星'
    
    
    def read1():
        print('tbjx模块:',name)
    
    
    def read2():
        print('tbjx模块')
        read1()
    
    
    def change():
        
        global name
        name = 'barry'
        
    if __name__ == '__main__':  
        # 在模块文件中测试read1()函数
        # 此模块被导入时 __name__ == tbjx 所以不执行
        read1()

    文件的查找顺序:

      先从内存中查找---> built-in 内置模块 --> sys.path 找

          

        

     

  • 相关阅读:
    LiveCD 是指用光盘就能启动并运行的系统
    漂亮的代码配色方案
    编程语言基础知识梗概
    监听器在游戏开发中的应用消息回调
    游戏业现状
    PS 1.x 中的寄存器
    Irrlicht(鬼火引擎)中多设备的支持
    关于《3D管线导论》这本书
    D3DPOOL
    c++虚函数表探究
  • 原文地址:https://www.cnblogs.com/echo2019/p/10233175.html
Copyright © 2011-2022 走看看