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

    ######################模块
    导入模块做的事
    1.产生新的名称空间
    2.以新建的名称空间为全局名称空间,执行文件的代码
    3.拿到一个模块名spam,指向spam.py产生的名称空间

    import 文件名 导入 在同级目录下
    import x
    x.foo() 之后 调用该模块下的 函数 或者变量 要加 模块名(文件名)

    from ... import ...
    优点:方便,不用加前缀
    缺点:容易跟当前文件的名称空间冲突

    可以导入文件下的一个函数

    from sparm import foo
    foo()  -->之后 可以直接 执行





    from sparm import *    -->导入 所有 功能  可以 直接调用
    foo()
    foo2()
    glo()
    foo()
    print (A)

    备注:sparm 中 开头定义了变量 A=100 又定义了函数 foo 和 foo2 都是 打印 变量 A,
              函数glo()定义了 修改全局变量 A =111 之后 再调用 foo 打印的 A 是 111 而 直接 print (A) 打印的是 100没变


    ######################包
    #当 在写一个比较大的项目时候  会引入 包的作用
    # 在别人 引用的你的 代码的时候 或者你引用别人的代码的时候 import 或者 from * import *
    #在引入的一个是 文件夹的时候 其实 是在导入 该文件夹下的 __init__.py 文件
    #再通过这个文件 导入 你这个文件夹 下的 其他 文件 或目录
    
    

    目录结构 是这样的
    test.py
    glance
      __init__.py (glance)
      api
        __init__.py (api)
        testapi.py

     test.py==>

    import glance   

    glance.B()


    glance目录-->__init__.py (glance)==>
    from .api.api_test1 import *
    from .api.mode import *

    api目录-->__init__.py (api)==>
    什么都没定义

    testapi.py==>
    def B():
    print ('这个是api 下的 test1的B')

    ----------------------这样 在和glance同级目录的文件就 可以调用 最里面 api 目录下文件的功能了
    最里面的文件 可以定义被调用的功能,放入一个列表,如果不在这个列表 就不被调用
    __all__=[]  来定义;这里面存放 被调用的

    ===============>然后还可以 定义 如果被调用,执行什么, 自己测试 执行什么
    if __name__ == '__main__':-->自己测试的结果
      print ('自己测试')
    else:            -->调用的结果
      from .api.testapi import *
      print ('被其他地方调用')

    ===========================================以上 的执行 形式 是 glance.功能(),但是 这样有可能会 遇见功能名重复;所以 参考 下面:


    ###################执行形式 是 glance.文件名.功能()

    目录结构 是这样的 
    test.py
    glance
      __init__.py (glance)
      api
        __init__.py (api)
        testapi.py


    test.py==>>
    import glance

    glance.mode.A()
    glance.mode.C()
    glance.api_test1.B()
    glance.api_test1.D()

    glance目录-->__init__.py (glance)==>
      from .api import *   #--->api_test1    mode
    api目录-->__init__.py (api)==>
      
    if __name__ =='__main__':  
    print ('这个是api')

    from .api_test1 import *   --># B D 功能
    from .mode import *     -->#AC


    testapi.py==>
      
    def B():
    print ('这个是api 下的 test1的B')

    def D():
    print ('不该显示这个D')

    mode.py==>

    def A():
    print ('model')

    def C():
    print ('不该显示这个C')











  • 相关阅读:
    addslashes与mysql_real_escape_string的区别
    gcc
    php函数
    JAVA基本类库介绍
    Linux系统精华教程
    CJIAN
    我的未来不是梦! 全新时代
    html标签属性disabled用法 全新时代
    javamail收取邮件demo code 全新时代
    TortoiseSVN安装注意事项及中文语言包安装 全新时代
  • 原文地址:https://www.cnblogs.com/onda/p/6929020.html
Copyright © 2011-2022 走看看