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')











  • 相关阅读:
    ckplayer-超酷网页视频播放器的使用
    我的第一篇博文(Winfrom下WebBrowser控件的使用)
    estore商城案例(四、五)------添加购物车&购物车显示/生成订单&在线支付
    estore商城案例(三)------Filter过滤器:自动登录&权限管理
    estore商城案例(二)------登录&添加商品&商品列表(下)
    estore商城案例(二)------登录&添加商品&商品列表(上)
    myeclipse2014在线安装aptana
    estore商城案例(一)------用户注册&邮件激活(下)
    estore商城案例(一)------用户注册&邮件激活(上)
    使用指南
  • 原文地址:https://www.cnblogs.com/onda/p/6929020.html
Copyright © 2011-2022 走看看